Estou procurando 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 para fazer isso no mac?
Estou procurando 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 para fazer isso no mac?
Respostas:
Com nome de base:
find . -type f -exec basename {} \;
;
finaliza a -exec
ação. O \
é necessário porque ;
também tem um significado especial para o shell.
Evilsoup mencionou que o que foi postado não funciona para nomes de arquivos espaçados. Então, em vez disso, você pode usar:
find . -type f -print0 | while IFS= read -r -d '' filename; do echo ${filename##*/}; done
Com o GNU find, você pode:
find ~/tmp/ -printf "%f\n"
Provavelmente vale a pena tentar no OS X também.
-printf
não é compatível com BSD do OS X find
.
-printf
tem pouca relação com o printf
utilitário de shell C ou POSIX printf
. Usar esse nome histórico de função para algo diferente é muito pouco considerado. Os caras conservadores do BSD provavelmente o veem da mesma maneira, então provavelmente não veremos clones -printf
no BSD, com esse nome.
Existe uma maneira melhor de remover tudo, exceto a última parte de um caminho de arquivo; com awk. É melhor porque o awk não é executado uma vez para cada arquivo. Em alguns casos, isso importa.
find ~/tmp/ -type f | awk -F/ '{ print $NF }'
Procuramos apenas arquivos em ~ / tmp e obtemos uma lista em que cada entrada é separada por barras. Portanto, usamos uma barra como separador de campos (-F /) e imprimimos o parâmetro de campo ($ 1 .. $ 9) que corresponde ao último campo ($ NF).
EDIT :
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
find . -type f -print0| xargs --null -n1 basename
--null
ou -n1
opções é acessível em OSX
Que tal isso:
find … | egrep -o -e '[^/]+$'
Vantagem: Apenas exatamente um processo adicional é gerado, não um para cada resultado.