Печатать только подкаталоги, в которых отображается файл

#shell #find

#оболочка #Найти

Вопрос:

Для данного файла я хочу перечислить только подкаталоги, в которых он отображается. Я ищу файл с помощью:

 find . -name <filename> -print
  

но это также выводит имя файла.
Я также хотел бы перечислить подкаталоги, отсортированные по дате создания. Я сортирую файлы следующим образом:

 find . -name test.txt -printf "%T@t%Tc %6k KiB %pn" | sort -n | cut -f 2-
  

Кто-нибудь может помочь?

Ответ №1:

Вы ищете каталоги, так как насчет простого создания условий, соответствующих правильным каталогам?

 find . -type d -exec test -f {}/test.txt ; -print
  

Это требует небольших дополнительных затрат на создание exec для каждого файла, но в остальном это быстро и просто.

Однако перечисление ваших результатов, отсортированных по дате создания, может быть проблематичным. Если все имена каталогов просты — буквенно-цифровые, без специальных символов, таких как новые строки, — тогда вам может сойти с рук позволить ls позаботиться о вещах:

 ls -dt $(find . -type d -exec test -f {}/test.txt ; -print)
  

Но остерегайтесь страшного риска синтаксического анализа LS.

Помимо этого .. вы могли бы использовать stat для сбора информации о данных для сортировки, но ее поведение будет зависеть от вашей операционной системы, или напишите что-нибудь на реальном языке программирования, который может обрабатывать данные файловой системы.