Как убрать ведущий "./" в unix "find"?

find . -type f -print

распечатывает

./file1
./file2
./file3

Любой способ напечатать

file1
file2
file3

?

8 ответов

Решение

Если они только в текущем каталоге

find * -type f -print

Это то, что вы хотите?

Найти только обычные файлы в текущем каталоге и распечатать их без./" префикс:

find -type f -printf '%P\n'

От человека найти, описание -printf формат:

% P Имя файла с именем аргумента командной строки, под которым он был найден, удален.

Используйте sed

find . | sed "s|^\./||"

Это может быть короче

find * -type f

Другой способ снятия ./ с помощью cut подобно:

find -type f | cut -c3-

Дальнейшее объяснение можно найти здесь

Поскольку -printf опция недоступна в OSX find вот одна команда, которая работает на OSX find, на всякий случай, если кто-то не хочет устанавливать gnu find с помощью brew так далее:

find . -type f -execdir printf '%s\n' {} + 

Для файлов в текущем каталоге:

      find . -maxdepth 1 -type f | xargs basename -a

-maxdepth 1 -> basically this means don't look in subdirectories, just current dir
-type f     -> find only regular files (including hidden ones)
basename    -> strip everything in front of actual file name (remove directory part)
-a          -> 'basename' tool with '-a' option will accept more than one file (batch mode)

Another way of stripping the ./

find * -type d -maxdepth 0
Другие вопросы по тегам