Я ищу, чтобы получить список только имена файлов (без остальной части пути) при выполнении команды find из терминала. Как это сделать на компьютере mac?
Как вернуть только имена файлов из команды find?
7 ответов
С имени:
find . -type f -exec basename {} \;
Evilsoup отметил, что то, что было опубликовано не разнесены имена файлов. Поэтому вместо этого можно использовать:
find . -type f -print0 | while IFS= read -r -d '' filename; do echo ${filename##*/}; done
С GNU find вы можете сделать:
find ~/tmp/ -printf "%f\n"
Это, вероятно, стоит попробовать и в OS X.
есть лучший способ удалить все, кроме последней части пути к файлу; с awk. Это лучше, потому что awk не выполняется один раз для каждого файла. В некоторых случаях это имеет значение.
find ~/tmp/ -type f | awk -F/ '{ print $NF }'
мы ищем только файлы в ~ / tmp и получаем список, где каждая запись разделена косой чертой. Следовательно, мы используем косую черту в качестве разделителя полей (-F/) и печатаем параметр поля ($1..$9), что соответствует последнему полю ($NF).
EDIT:
используя sed
:
$ find . -type f | sed 's/.*\///'
С помощью xargs команда, как указано в ответе @nerdwaller
$ find . -type f -print0 | xargs --null -n1 basename
Как насчет этого:
find … | egrep -o -e '[^/]+$'
преимущество: порождается только один дополнительный процесс, а не один для каждого результата.
можно назвать sh
изнутри find -exec
вариант и во избежание использовать uneccesary трубы. Это также имеет то преимущество, что вам не нужно беспокоиться о забавных именах файлов (пробелы, новые строки и т. д.):
find . -type f -exec sh -c 'echo "${0##*/}"' {} \;
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]