Script Bash para percorrer pastas e listar arquivos em texto

Script Bash para percorrer pastas e listar arquivos em texto

Posso fazer isso em scripts CMD do Windows, mas agora estou entrando no Debian via Raspberry Pi.

O que eu gostaria de fazer é...

(Na pasta atual)

  • Para cada subpasta...
    • Crie um arquivo chamado original_filenames.txt
    • Faça eco do nome da pasta neste original_filenames.txt
    • Liste todos os arquivos (incluindo quaisquer subpastas) em original_filenames.txt

Responder1

Usando um loop de shell:

for dir in */; do
    { printf '%s\n' "$dir"
      ( cd "$dir" && find . )
    } >"$dir/original_filenames.txt"
done

Isso itera em todos os subdiretórios no diretório atual. O corpo do loop exibe o nome do diretório e, em seguida, uma lista de todos os arquivos e diretórios, recursivamente, nesse diretório. Esta saída vai para o original_filenames.txtarquivo no diretório.

Mais curta:

for dir in */; do
    find "$dir" >"$dir/original_filenames.txt"
done

Isso fornece uma saída ligeiramente diferente, pois todos os nomes de caminho gravados no arquivo começam com o nome da subpasta.

Se você não está interessado em nomes de diretórios e deseja apenas nomes de caminhos de arquivos regulares, use findwith -type fapós o nome do diretório.


Observe que se você está planejandousandogerar arquivos de saída para qualquer coisa, então isso falhará (ou pelo menos será muito problemático) se algum dos nomes de caminho encontrados contiver novas linhas (o que é inteiramente possível em um sistema Unix).

Responder2

Você poderia fazer isso com o findcomando e a execopção - algo assim:

find . -type d \( ! -name . \) -exec bash -c '
    dirname=$(basename "{}") && 
    cd "{}" && 
    echo "{}" > original_filenames.txt && 
    ls | grep -Fv original_filenames.txt >> original_filenames.txt
' \;

Aqui está uma postagem do StackOverflow que você pode achar útil:

informação relacionada