シェルスクリプト:.texソースファイルを含むファイルを除外するように.pdfファイルのリストをフィルタリングします。

シェルスクリプト:.texソースファイルを含むファイルを除外するように.pdfファイルのリストをフィルタリングします。

改行で区切られたファイルパスのリストはすべてpdfファイルにあります。*.tex同じディレクトリにそのファイルを含むすべてのファイルをフィルタリングして自動的に作成されたとします。

たとえば、リストにfoo.tex、、、foo.pdfが含まれている場合bar.pdfにのみスクリプトが出力されるようにしたいと思いますbar.pdffoo/foo.texそして、ある場合はbar/foo.pdfスクリプトを出力したいと思いますbar/foo.pdf

(例えば、説明したようにこの問題:texファイルと外部から生成されたpdfファイルを含むgitリポジトリがあります。自動生成されたPDFはgitで追跡することはできませんが、他のPDFは追跡する必要があります。私が考えた解決策は、ファイルから生成されたPDFではなく、追跡されていないPDFがあるときに警告するgit post-commitフックを追加すること*.pdfでした。追跡されていないPDFリストのインポートを使用していますが、次の手順をきちんと実装する方法がわかりません。 ).gitignore.texgit 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改行などを含む値とファイル名に関する一般的な警告が適用されますが、異常なことが発生しないと仮定すると、すべてがすぐに機能します。

関連情報