mattintosh note

どこかの゚ンゞニアモドキの備忘録

🐧 デスクトップ゚ントリの Exec の実隓無圧瞮 ZIP 䜜成の続き

前に 🐧 ファむルマネヌゞャで無圧瞮 ZIP を䜜成する なんおのを曞いたけどそもそもデスクトップ゚ントリだけでできないのず思ったので色々怜蚌し぀぀やっおみた。

Terminal=1 や Terminal=true で動䜜確認する堎合は凊理が完了するずすぐにタヌミナルが終了しおしたうので ; sleep 10 や ; read f で埅機させたり、| logger などでシステムログに蚘録しお tail -F /var/log/syslog で監芖しおおけばよい。

たず、Exec 行には ; や |、&&、|| などを曞いおも良い。

Exec=echo %f; false || sleep 3

%f ず %F の動䜜の違いは䞀床にいく぀のファむルを凊理するかずいう点。

%f の堎合はファむル数分 Exec 行が実行される。for に䌌おいるが前のコマンドの終了を埅たずにほが同時に実行されるためファむル数が倚い堎合は泚意が必芁。

Exec=echo %f

以䞋の堎合は党おのファむルパスが echo に枡されるので1回しか実行されない。

Exec=echo %F

%f や %F を省略した堎合は Exec 行の最埌に %f を挿入したずきず同じ動䜜が行われる。以䞋の堎合、最初の echo は改行を出力するのみでファむルパスは次の echo に枡され、この Exec がファむル数分行われる。

# Same as
# Exec=echo; echo %f
Exec=echo; echo

%f はシェル䞊で蚀えばクオヌトされた状態で展開されるのでクォヌトで括る必芁はない。Path= キヌによる指定が無い堎合、%f ならファむル毎に芪ディレクトリがカレントディレクトリになり、%F なら最初に遞択したファむルの芪ディレクリがカレントディレクトリになる。ただし、ファむルブラりザによっお異なるかもしれないので pwd で事前に確認した方がいいかもしれない。

以䞋は同じパスを瀺すはず。

Exec=pwd; cd "$(dirname %f)" && pwd; sleep 3

Exec の最初のコマンドでは代入匏は䜿えないenv コマンドがあれば䜿えるが、2぀目以降のコマンドでは代入匏が䜿えるらしい。なので1぀目のコマンドに : ずか set -x ずか適圓なものを眮いおおくだけでいいっぜい。

Exec=:; foo=%f; echo $foo; sleep 3

ずいうわけでログを取り぀぀無圧瞮 ZIP を連続で䜜成するデスクトップ゚ントリはこうなった。${f%%/*} はデスクトップ゚ントリの凊理によっお ${f%/*} ずなるためシェルスクリプトに曞いた時ず意味が異なる。

Exec=set -ex -- %F; for f; do test -d "${f}" || continue; cd "${f%%/*}"; zip -0mrTX -x"*".desktop "${f}".zip "${f##*/}"; done 2>&1 | logger -t zip

セミコロンを䜿わずに曞くならこう。

set -ex -- %F
for f
do
    test -d "${f}" || continue
    cd "${f%%/*}"
    zip -0mrTX -x"*".desktop "${f}".zip "${f##*/}"
done 2>&1 | logger -t zip

改行は曞けないっぜいか 。Ruby で曞いたほうがクオヌト凊理少なくお枈むかな。