O comando único find
produzirá todos os arquivos com caminho absoluto
find $(pwd) -type f
Na verdade, eu tenho uma pasta que contém várias subpastas com muitas imagens em cada.
Estou tentando reunir todos os nomes dos arquivos em cada subpasta em um arquivo de texto (filesNames.txt) nessa subpasta na forma de:
Absoluta / 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 é que:
Eu tenho o endereço absoluto apenas para o primeiro arquivo em cada subpasta. Para o resto, há apenas nomes de arquivos sem endereço absoluto:
/run/media/parent_folder/subfolder/filename1.png
filename2.png
filename3.png
...
Acho que está relacionado à variável $ PWD , que eu repasso apenas uma vez para cada subpasta. Como posso alterar o script de uma forma adequada?
Obrigado antecipadamente.
E se você quiser fazer isso usando o shell script puro e não quiser usar o 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 que você deseja fazer a pesquisa. Ele fará exatamente o que o find ou outros mecanismos recursivos fazem, mas usando um loop for, e você pode personalizar para as 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
(...)
Tags shell shell-script pwd