Com nome de base:
find . -type f -exec basename {} \;
Eu estou olhando para obter uma lista de apenas nomes de arquivos (sem o resto do caminho) ao executar o comando find a partir de um terminal. Como faço isso no mac?
O Evilsoup mencionou que o que foi publicado não funciona para nomes de arquivos espaçados. Então, você pode usar:
find . -type f -print0 | while IFS= read -r -d '' filename; do echo ${filename##*/}; done
Com o GNU find, você pode fazer:
find ~/tmp/ -printf "%f\n"
Provavelmente vale a pena tentar também no OS X.
Existe uma maneira melhor de remover tudo, menos a última parte de um caminho de arquivo; com o awk É melhor porque o awk não é executado uma vez para cada arquivo. Em alguns casos, isso é importante.
find ~/tmp/ -type f | awk -F/ '{ print $NF }'
Procuramos apenas arquivos em ~ / tmp e obtemos uma lista onde cada entrada é separada por barras. Assim, usamos uma barra como o separador de campo (-F /) e imprimimos o parâmetro de campo ($ 1 .. $ 9) que corresponde ao último campo ($ NF).
EDITAR :
Usando sed
:
$ find . -type f | sed 's/.*\///'
Usando o comando xargs , conforme mencionado na resposta de @nerdwaller
$ find . -type f -print0 | xargs --null -n1 basename
E sobre isso:
find … | egrep -o -e '[^/]+$'
Vantagem: somente exatamente um processo adicional é gerado, não um para cada resultado.
Você pode chamar sh
da opção -exec
do find e evitar o uso de pipes desnecessários. Isso também tem a vantagem de você não precisar se preocupar com nomes de arquivos engraçados (espaços, novas linhas, etc.):
find . -type f -exec sh -c 'echo "${0##*/}"' {} \;