改行で区切られたファイルパスのリストはすべてpdfファイルにあります。*.tex
同じディレクトリにそのファイルを含むすべてのファイルをフィルタリングして自動的に作成されたとします。
たとえば、リストにfoo.tex
、、、foo.pdf
が含まれている場合bar.pdf
にのみスクリプトが出力されるようにしたいと思いますbar.pdf
。foo/foo.tex
そして、ある場合はbar/foo.pdf
スクリプトを出力したいと思いますbar/foo.pdf
。
(例えば、説明したようにこの問題:texファイルと外部から生成されたpdfファイルを含むgitリポジトリがあります。自動生成されたPDFはgitで追跡することはできませんが、他のPDFは追跡する必要があります。私が考えた解決策は、ファイルから生成されたPDFではなく、追跡されていないPDFがあるときに警告するgit post-commitフックを追加すること*.pdf
でした。追跡されていないPDFリストのインポートを使用していますが、次の手順をきちんと実装する方法がわかりません。 ).gitignore
.tex
git status --ignored *.pdf
答え1
通常のループを使用できます[ -e
そして${xxx%.pdf}
ファイル名を確認して設定します。これにより、標準入力のパスが1行に1つずつ読み込まれます。
while read path
do
[ -e "${path%.pdf}.tex" ] || echo "$path"
done
"${path%.pdf}"
次に展開 $path
「.pdf」を削除し、最後に「.tex」を入れます。存在する場合は-e
何もせず、そうでない場合(||
)PDFパスを印刷します。必要に応じて、より複雑なロジックとアクションを配置できます。
IFS
改行などを含む値とファイル名に関する一般的な警告が適用されますが、異常なことが発生しないと仮定すると、すべてがすぐに機能します。