
多くの場合、 を使用して複数の PDF ドキュメントに注釈を付ける必要がありますxournal
。 「新しい」ファイルのディレクトリから開始する場合はpdf
、 でそれらすべてを開きますxournal
。
for f in *pdf; do xournal $f&; done
たとえば、ファイルに注釈を付け始めるとき、.pdf
それを として保存します。つまり、ファイル拡張子を切り替えるだけです。ここで、中断されたセッションがあり、対応するファイルが存在しない場合はディレクトリ内の.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
はシェル コードとして実行されます。は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 を 1 か所でのみ再割り当てして呼び出し、拡張子マングリングに${f%.pdf}
1 回だけアクセスします。
for f in *.pdf
do
xoj = "${f%.pdf}.xoj"
[ -f "$xoj" ] && f="$xoj"
xournal "$f" &
done