Além de find
, também é possível fazer isso apenas com o bash
shell:
shopt -s globstar
printf "%s\n" ** >file
Todos os nomes dos arquivos de saída são impressos relativos ao diretório atual.
shopt -s globstar
ativa globstar
, o que dá bash
parte do poder de find
. Com globstar
, duas estrelas em fila, como man bash
, "correspondem a todos os arquivos e zero ou mais diretórios e subdiretórios". Aqui, printf
é usado para formatar os nomes dos arquivos, um para uma linha. A saída é enviada para um arquivo de texto chamado file
.
Nomes de arquivos com caracteres especiais
Esta pergunta pede saída em um arquivo de texto. Arquivos de texto geralmente possuem linhas separadas por caracteres de nova linha. Se qualquer nome de arquivo ou diretório contiver um caractere de nova linha, isso causará confusão. A menos que se saiba que não existe tal arquivo, é melhor usar um arquivo separado por nulo, não um arquivo de texto separado por nova linha.
Nesse caso, pode-se usar:
printf "%sfind -print0 >file
0" ** >file
Ou
shopt -s globstar
printf "%s\n" ** >file
Como o caracter nulo (ascii 000) nunca é permitido em um nome de arquivo, esse é o formato que pode ser usado para armazenar nomes de arquivos em um arquivo sem o risco de perder informações.