
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.txt
arquivo 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 find
with -type f
apó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 find
comando e a exec
opçã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: