2017-01-06 2 views
0

Я ищу команду csh, которая ищет только каталоги.
Я знаю имя каталога (MY_DIR), однако я полностью игнорирую, насколько он ниже текущего каталога.csh find command: как получить верхний каталог

Я хотел бы команду:

  • не дал никаких сообщений об ошибках в случае, если в конечном итоге не доступные каталоги;
  • дал строку void в случае, если он не нашел директорию;
  • прекратил поиск, как только он обнаружил первое вхождение в каталог;
  • отдавал приоритет самым верхним каталогам.

Я думал find был правильная команда, и я использовал его, как это:

find . -type d ! -perm -a+r -prune -o \(-type d -o -type l \) -name MY_DIR -print -quit 

является структурой каталогов следующим образом

DIR_A0/DIR_A1/DIR_A2/MY_DIR 
DIR_B0/DIR_B1/MY_DIR 

результата был:

DIR_A0/DIR_A1/DIR_A2/MY_DIR 

, и я хотел бы получить:

DIR_B0/DIR_B1/MY_DIR 

Интересно, может ли кто-нибудь дать мне совет о том, как сортировать эту штуку.

Большое спасибо заранее

ответ

0

«етично» каталог является один с наименьшим количеством / символов.

Borrowing from this answer, мы можем получить это, перенаправив вывод awk:

find . -name MY_DIR |\ 
    awk -F/ 'BEGIN { depth=100; } depth > NF { depth=NF; dir=$0; } END { print dir }' 

Обратите внимание, что вы хотите удалить вариант -quit из вашей команды find. AFAIK нет способа сделать это с только найти, поскольку find простые пути поиска, поскольку они хранятся в файловой системе (которая может быть в любом порядке). Вы получите необходимо, чтобы получить полный список в первую очередь.

Смежные вопросы