
我經常需要使用 來註解多個 pdf 文件xournal
。如果我從“新鮮”文件的目錄開始pdf
,我只需使用以下命令打開它們xournal
:
for f in *pdf; do xournal $f&; done
當我開始註釋一個檔案時,假設.pdf
我將其另存為 a .xoj
,即我只是切換檔案副檔名。現在假設我有一個中斷的會話,並且想要打開.pdf
目錄中的所有文件,前提是不.xoj
存在相應的文件,.xoj
否則打開該文件(均使用xournal
)。
我怎樣才能在命令列中執行此操作?
答案1
您可以刪除.pdf
以取得不含副檔名的檔案名,並檢查具有副檔名的該名稱的檔案.xoj
:
for f in *.pdf
do
if [ -f "${f%.pdf}".xoj ]
then
xournal "${f%.pdf}".xoj &
else
xournal "${f}" &
fi
done
答案2
for f in *.pdf; do
fname=$(basename "$f" .pdf);
if [[ -e "${fname}".xoj ]]; then
# .xoj file does exist, do things here
else
# .xoj file doesn't exist, do other things here
fi
done
答案3
與zsh
你可以使用e
細繩 全域限定符:
for f (./*.pdf(.e_'[[ ! -f $REPLY:r.xoj ]] || REPLY=$REPLY:r.xoj'_))
xournal $f &
該字串[[ ! -f $REPLY:r.xoj ]] || REPLY=$REPLY:r.xoj
作為 shell 程式碼執行。REPLY
保存目前參數的值。如果.xoj
目前文件沒有對應的文件.pdf
,則[[ ! -f $REPLY:r.xoj ]]
傳回true
並且不會發生任何事情(REPLY
保持不變)。如果當前文件
存在對應的文件,則返回並執行,將(通過修飾符)當前參數的擴展名替換為..xoj
.pdf
[[ ! -f $REPLY:r.xoj ]]
false
REPLY=$REPLY:r.xoj
:r
.pdf
.xoj
答案4
只是想讓它變得清晰和簡潔。僅在一處重新分配f
和調用 xournal,僅訪問一次擴展修飾${f%.pdf}
。
for f in *.pdf
do
xoj = "${f%.pdf}.xoj"
[ -f "$xoj" ] && f="$xoj"
xournal "$f" &
done