Обратное ответу Иниана , т. е. искать каталоги, а затем смотреть, содержат ли они файл с определенным именем.
Далее выводятся пути к найденным файлам относительно каталогаfoo
:
find foo -type d -exec sh -c '
for dirpath do
pathname="$dirpath/${dirpath##*/}.pdf"
if [ -f "$pathname" ]; then
printf "%s\n" "$pathname"
fi
done' sh {} +
${dirpath##*/}
будет заменен частью имени файла в пути к каталогу и может быть заменен на $(basename "$dirpath")
.
Для тех, кто любит короткий -синтаксис схемы:
find foo -type d -exec sh -c '
for dirpath do
pathname="$dirpath/${dirpath##*/}.pdf"
[ -f "$pathname" ] && printf "%s\n" "$pathname"
done' sh {} +
Преимущество такого способа заключается в том, что у вас может быть больше файлов PDF, чем каталогов. Количество задействованных тестов уменьшается, если ограничить запрос меньшим числом (числом каталогов ).
Например, если один каталог содержит 100 PDF-файлов, будет предпринята попытка обнаружить только один из них, а не сравнивать имена всех 100 файлов с именами каталога.