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

1

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.

    
por Ali 23.05.2016 / 20:07

2 respostas

2

O comando único find produzirá todos os arquivos com caminho absoluto

find $(pwd) -type f
    
por 23.05.2016 / 20:14
1

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
(...)
    
por 23.05.2016 / 21:50