Я ищу, чтобы получить список только имен файлов (без остальной части пути) при выполнении команды поиска из терминала. Как мне сделать это на Mac?
13
С базовым именем:
find . -type f -exec basename {} \;
;
прекращает-exec
действие.\
Необходимо потому , что;
имеет особое значение для оболочки.Evilsoup упомянул, что то, что было опубликовано, не работает для имен файлов с интервалом. Так что вместо этого вы можете использовать:
источник
С помощью GNU find вы можете сделать:
Это, вероятно, стоит попробовать и в OS X.
источник
-printf
не поддерживается на BSD OS X вfind
.-printf
имеет мало отношения кprintf
утилите оболочки C или POSIXprintf
. Использование этого исторического имени функции для чего-то другого очень плохо продумано. Консервативные парни из BSD, вероятно, видят это так же, поэтому мы, вероятно, не увидим клонов-printf
в находке BSD под этим именем.Есть лучший способ удалить все, кроме последней части пути к файлу; с awk. Это лучше, потому что awk не выполняется один раз для каждого файла. В некоторых случаях это имеет значение.
Мы ищем только файлы в ~ / tmp и получаем список, в котором каждая запись отделена косой чертой. Следовательно, мы используем косую черту в качестве разделителя полей (-F /) и печатаем параметр поля ($ 1 .. $ 9), который соответствует последнему полю ($ NF).
источник
РЕДАКТИРОВАТЬ :
Использование
sed
:Использование команды xargs , как указано в ответе @nerdwaller
источник
find . -type f -print0| xargs --null -n1 basename
--null
ни-n1
опции недоступны в OSXЧто насчет этого:
Преимущество: создается только один дополнительный процесс, а не один для каждого результата.
источник
Вы можете позвонить
sh
из-exec
опции поиска и избежать использования ненужных каналов. Это также имеет то преимущество, что вам не нужно беспокоиться о смешных именах файлов (пробелы, переводы строки и т. Д.):источник