解决方案
这不是很易读——最好把它做成一个脚本或 shell 函数并带有一些像样的换行——但如果你真的想的话,你可以强制循环成为单行。
# 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
请注意,在这两种情况下,其他格式的没有补码的文件都会被忽略。