Скажи, что у меня есть следующий файл
this/is/my/file.txt
Могу ли я найти этот файл, если знаю, что он находится в каталоге /my/
?
Скажи, что у меня есть следующий файл
this/is/my/file.txt
Могу ли я найти этот файл, если знаю, что он находится в каталоге /my/
?
find
файл в самой внутренней директории?Вы можете использовать find
для поиска определенного файла (file.txt
), и он будет возвращен для вас (в соответствии с указанными параметрами). Но что, если у вас есть два file.txt
и вы хотите сопоставить только один, скажем, для использования в сценарии? Введите awk
, sort
, head
и cut
:
find /my/ -type f -name file.txt | awk -F/ '{ print NF-1, $0 }' | sort -nr | head -n1 | cut -d " " -f2
Это вернет один результат - самое глубокое совпадение - или ни одного.
find
в /my/
все обычные файлы (-type f
) -name
d file.txt
перейдите к awk
и получите его для подсчета количества каталогов (глубины), установив разделитель полей в /
(-F/
) и добавив к нему префикс (print NF-1, $0
)
sort
количеству, сначала по наибольшему (т.е. большинству каталогов)
взять только один результат (head -n1
)
снимите счетчик глубины (cut -d " " -f2
)
Может быть более короткий способ сделать это, но это вернет самый глубокий результат. Он предполагает косую черту /
для разграничения каталогов, но я думаю, что мы можем допустить это. Протестировано на GNU bash, version 4.3.30(1)-release
(и GNU bash, version 3.2.53(1)-release
на OSX) и не слишком полагается на GNUisms.