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?
13
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:
fonte
Com o GNU find, você pode:
Provavelmente vale a pena tentar no OS X também.
fonte
-printf
não é compatível com BSD do OS Xfind
.-printf
tem pouca relação com oprintf
utilitário de shell C ou POSIXprintf
. 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.
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).
fonte
EDIT :
Usando
sed
:Usando o comando xargs , conforme mencionado na resposta de @nerdwaller
fonte
find . -type f -print0| xargs --null -n1 basename
--null
ou-n1
opções é acessível em OSXQue tal isso:
Vantagem: Apenas exatamente um processo adicional é gerado, não um para cada resultado.
fonte
Você pode ligar
sh
de dentro da-exec
opção de localização e evitar o uso de tubos 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.):fonte