Как я могу перечислить только файлы с дополнительными расширениями?
В каталоге у меня есть куча файлов, таких как file1.tex, file1.pdf, file2.tex, file2.pdf и другие вместе с другими файлами. Я хочу, предпочтительно один вкладыш в bash (чтобы включить в make-файл в качестве зависимости), чтобы
- перечислите все текстовые файлы, если их версии PDF также доступны.
- перечислите все файлы PDF, если их версии текс также доступны.
РЕДАКТИРОВАТЬ
Я пытался
find . \( -name '*.pdf' -name '*.tex' \)
но это не сработало. Я предполагаю, что описанный выше подход полезен, если я хочу найти файлы с расширениями pdf или tex, используя опцию -o между двумя переключателями имен. Спасибо
Суреш
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
Обратите внимание, что в обоих случаях файлы без дополнений в другом формате игнорируются.