find . -name \*.jar -printf '%P:'
Usando find
, é trivial pesquisar todos os arquivos com um padrão específico:
find . -name \*.jar
Como eu combino os resultados desse comando (por exemplo, todos os nomes de arquivos) em uma única string separada por um :
?
O resultado esperado seria algo como:
"./foo.jar:./bar.jar"
Agradecemos antecipadamente por sua consideração e resposta.
find . -name \*.jar | tr '\n' ':'
find . -name '*.jar' | paste -sd : -
Mas isso não funcionaria corretamente se houvesse nomes de arquivos ou diretórios que contivessem caracteres de nova linha.
Para contornar isso, em um sistema GNU, você pode usar:
find . -name '*.jar' -print0 | paste -zsd: | tr 'LC_ALL=C find . -name '*:*' -prune -o -name '*.jar' -print0 |
paste -zsd: | tr 'set -o extendedglob # best in ~/.zshrc
jar_files=(**/*.jar~*:*(ND))
printf '%s\n' ${(j/:/)jar_files}
' '\n'
' '\n'
É claro que, se os nomes dos arquivos ou diretórios tiverem :
caracteres, não há muito o que fazer, embora você possa dizer find
para ignorá-los:
find . -name '*.jar' | paste -sd : -
com zsh
:
find . -name '*.jar' -print0 | paste -zsd: | tr 'LC_ALL=C find . -name '*:*' -prune -o -name '*.jar' -print0 |
paste -zsd: | tr 'set -o extendedglob # best in ~/.zshrc
jar_files=(**/*.jar~*:*(ND))
printf '%s\n' ${(j/:/)jar_files}
' '\n'
' '\n'
Tags bash find shell-script