在命令列中首選文件類型

在命令列中首選文件類型

我經常需要使用 來註解多個 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 ]]falseREPLY=$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

相關內容