コマンドラインでファイル形式を好む

コマンドラインでファイル形式を好む

私はしばしば複数のPDF文書に注釈を付けるためにそれを使用する必要がありますxournal。 「新しい」ファイルがあるディレクトリから起動したら、次のようにpdfファイルを開きますxournal

for f in *pdf; do xournal $f&; done

.pdfファイルにコメントを付け始めるときにファイルをとして保存するとします.xoj。つまり、ファイル拡張子を置き換えるだけです。これで中断されたセッションがあり、そのファイルがない場合は.pdfディレクトリ内のすべてのファイルを開き、それ以外の場合はファイルを開きます(両方を使用して)。.xoj.xojxournal

コマンドラインでこれを行うにはどうすればよいですか?

答え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シェルコードとして実行されます。REPLY現在のパラメータ値を保存します。.xoj現在のファイルにそのファイルがない場合は返され、.pdf[[ ! -f $REPLY:r.xoj ]]true起こりません(REPLY変更されていません)。
現在のファイルにそのファイルが存在する場合は返し、実行し(修飾子を介して)現在のパラメータの拡張子を 。.xoj.pdf[[ ! -f $REPLY:r.xoj ]]falseREPLY=$REPLY:r.xoj:r.pdf.xoj

答え4

ただ明確で簡潔に説明しようとしています。 xournalは1つの場所でのみ再割り当てされ、呼び出され、f拡張装飾は一度だけアクセスされます${f%.pdf}

for f in *.pdf
do
    xoj = "${f%.pdf}.xoj"
    [ -f "$xoj" ] && f="$xoj"
    xournal "$f" &
done

関連情報