ソリューション
これはあまり読みにくいです -- これを適切な行の折り返しを伴うスクリプトまたはシェル関数にする方がはるかに良いでしょう -- しかし、本当に望むなら、ループを強制的に 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
どちらの場合も、他の形式の補数のないファイルは黙って無視されることに注意してください。