Na verdade, tenho uma pasta que contém várias subpastas com muitas imagens em cada uma.
Estou tentando reunir todos os nomes dos arquivos em cada subpasta em um arquivo de texto (filesNames.txt) nessa subpasta na forma de:
Absoluto/caminho/para/cada/arquivo/nome do arquivo
Então, escrevi um script na pasta pai:
#!/bin/sh
for dir in "$PWD"/*/; do
arr=( "$dir"* )
cd "$dir"
printf "%s 1\n" "$PWD/${arr[@]##*/}" > "$dir"filesNames.txt
cd ..
done
Meu problemaé aquele:
Eu tenho o endereço absoluto apenas para o primeiro arquivo em cada subpasta. De resto, existem apenas nomes de arquivos sem endereço absoluto:
/run/media/parent_folder/subfolder/filename1.png
filename2.png
filename3.png
...
Eu acho que está relacionado$PWDvariável que eu itero apenas uma vez para cada subpasta. Como posso alterar o script de uma forma adequada?
Desde já, obrigado.
Responder1
Um único find
comando produzirá todos os arquivos com caminho absoluto
find $(pwd) -type f
Responder2
E se você quiser fazer isso usando shell script puro e não quiser usar find, tente este pequeno:
#!/bin/bash
#Simple bash recursive loop search - Luciano A. Martini =)
nextdir(){
for f in *; do
if [ -d "$f" ] && [ ! -L "$f" ]; then
#echo "Inside folder: $PWD/$f"
nextdir "$f"
cd ..
continue
else
echo "$PWD/$f"
fi
done
}
#call the function for the first time...
nextdir
Salve por exemplo como loop recursivo e execute na pasta onde deseja fazer a busca. Ele fará exatamente o que o find ou outros mecanismos recursivos fazem, mas usando um loop for, e você pode personalizar de acordo com suas necessidades!
$./recursive-loop
/home/luciano/readme.txt
/home/luciano/images/a.bmp
/home/luciano/texts/a.txt
/home/luciano/texts/b.txt
/home/luciano/texts/music/lyrics.txt
(...)