Usando um loop de shell:
for dir in */; do
{ printf '%s\n' "$dir"
( cd "$dir" && find . )
} >"$dir/original_filenames.txt"
done
Isso itera sobre todos os subdiretórios no diretório atual. O corpo do loop produz o nome do diretório e, em seguida, uma lista de todos os arquivos e diretórios, recursivamente, nesse diretório. Essa saída vai para o arquivo original_filenames.txt
no diretório.
Mais curto:
for dir in */; do
find "$dir" >"$dir/original_filenames.txt"
done
Isso gera um resultado ligeiramente diferente, pois os nomes dos caminhos que são gravados no arquivo começam todos com o nome da subpasta.
Se você não estiver interessado em nomes de diretório e quiser apenas nomes de caminho dos arquivos regulares, use find
com -type f
após o nome do diretório.
Note que se você está planejando usar os arquivos gerados para qualquer coisa, então isto irá falhar (ou pelo menos ser muito problemático) se algum dos caminhos encontrados contiver novas linhas (o que é inteiramente possível em um sistema Unix).