-2

在一个目录中,我有一堆文件,如 file1.tex、file1.pdf、file2.tex、file2.pdf 等以及其他文件。我想要,最好是 bash 中的一个衬里(作为依赖项包含在 make 文件中),

  1. 列出所有 tex 文件(如果它们的 pdf 版本也可用)。
  2. 列出所有 pdf 文件(如果它们的 tex 版本也可用)。

编辑

我试过

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

但它没有用。如果我想通过在两个名称开关之间使用 -o 选项来查找具有 pdftex 扩展名的文件,我想上述方法很有用。谢谢

肯定的

4

1 回答 1

4

解决方案

这不是很易读——最好把它做成一个脚本或 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

请注意,在这两种情况下,其他格式的没有补码的文件都会被忽略。

于 2012-05-18T06:02:43.677 回答