-2

ディレクトリには、file1.tex、file1.pdf、file2.tex、file2.pdfなどのファイルと他のファイルがあります。私は、できればbashの1つのライナー(依存関係としてmakeファイルに含める)を

  1. PDFバージョンも利用できる場合は、すべてのtexファイルを一覧表示します。
  2. texバージョンも利用できる場合は、すべてのpdfファイルを一覧表示します。

編集

やってみた

find . \( -name '*.pdf' -name '*.tex' \) 

しかし、それは機能しませんでした。2つの名前スイッチの間に-oオプションを使用して、 pdfまたはtex拡張子の付いたファイルを検索する場合は、上記のアプローチが役立つと思います。ありがとう

確かに

4

1 に答える 1

4

ソリューション

これはあまり読みにくいです -- これを適切な行の折り返しを伴うスクリプトまたはシェル関数にする方がはるかに良いでしょう -- しかし、本当に望むなら、ループを強制的に 1 行にすることができます。

# List TeX files with matching PDFs.
for file in *.pdf; do [ -f "${file/.pdf}.tex" ] && ls "${file/.pdf/.tex}"; done

# List PDFs with matching TeX files.
for file in *.tex; do [ -f "${file/.tex}.pdf" ] && ls "${file/.tex/.pdf}"; done

ソリューションの検証

いくつかのサンプル データを使用して、ソリューションが適切に機能することをすばやくテストできます。

$ touch file1.pdf file1.tex file2.pdf file2.tex file3.pdf file4.tex

$ for file in *.pdf; do [ -f "${file/.pdf}.tex" ] && ls "${file/.pdf/.tex}"; done
file1.tex
file2.tex

$ for file in *.tex; do [ -f "${file/.tex}.pdf" ] && ls "${file/.tex/.pdf}"; done
file1.pdf
file2.pdf

どちらの場合も、他の形式の補数のないファイルは黙って無視されることに注意してください。

于 2012-05-18T06:02:43.677 に答える