encontre meu mal-entendido sobre este pequeno pedaço de script de shell

encontre meu mal-entendido sobre este pequeno pedaço de script de shell

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 findcomando 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
(...)

informação relacionada