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 -execaçã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.
-printfnão é compatível com BSD do OS X find.
-printftem pouca relação com o printfutilitá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 -printfno 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
--nullou -n1opçõ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.