我怎样才能列出具有补充扩展名的文件?

时间:2012-05-18 05:15:42

标签: bash file-listing

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

  1. 列出所有tex文件,如果他们的pdf版本也可用。
  2. 列出所有pdf文件,如果他们的tex版本也可用。
  3. 编辑

    我曾尝试过

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

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

    苏雷什

1 个答案:

答案 0 :(得分:4)

解决方案

这不是非常易读 - 用一些不错的换行来制作这个脚本或shell函数要好得多 - 但如果你真的想要,你可以强制循环成为一个单行。< / p>

# 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

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