Looping recursivamente através de pastas

1

Eu estou tentando executar um script que irá un rar coisas e adicionar um arquivo para sinalizar o arquivo como "processado", mas lançando exceções como diretório não encontrado e não tenho certeza do porquê.

#!/bin/bash

function recursive {
    if [ -d "" ]; then
        for dir in ""; do
            if [ -f "$dir"*rar ]; then
                for file in $dir*.rar; do
                    echo $file

                    if [ ! -f "$dir$file.processed" ]; then                                
                       unrar e "$dir$file.rar" "$dir"
                       touch "$dir$file.processed"
                    fi
                done
            fi

            echo $dir

            subs= find $dir -maxdepth 1 -type d=
            if [ "$subs" != "0" ] && [ "$subs" != "No such file or directory" ]; then
                recursive "$dir*/"
            fi
        done
    fi
}

recursive /home/user/Complete/*/
    
por JBurlison 20.04.2017 / 19:01

2 respostas

1

Este script é baseado na sua resposta, mas usa find em vez de passar pelo sistema de arquivos manualmente.

#!/bin/bash

unrar_if_needed()(
    file=""
    dir="$(dirname "$file")" # Extract dir name from file path.
    echo "Found: $file"
    if [[ -f "$file".processed ]]; then # Double brackets are better.
        echo "    Already unrared."
    else
        echo -n "    Unraring... "
        if unrar -inul e "$file" "$dir"; then # This if-statement is not necessary, but a nice touch.
            touch "$file".processed
            echo "Done."
        fi
    fi
)

export -f unrar_if_needed

if [[ "" ]]; then
    dir=""
else
    dir=.
fi

echo "Looking in: $dir"
find "$dir" -iname "*.rar" -exec bash -c 'unrar_if_needed {}' \; # find runs the custom function.

A saída deve ficar assim:

$ script.sh somedir
Looking in: somedir
Found: ./somedir/file1.rar
    Unraring... Done.
Found: ./somedir/file2.rar
    Already unrared.
    
por wjandrea 23.04.2017 / 22:25
0
#!/bin/bash

function recursive {
    echo ""
    for dir in ""*/; do
        if [ -d "$dir" ]; then
            echo "Reading Directory for rars: $dir"
            for file in "$dir"*.rar; do
                echo "Found Rar: $file"
                if [ ! -f "$dir"processed ] && [ ! -f "$file".processed ]; then
                    echo "File not unrared. Unraring File."                                
                    unrar e "$file" "$dir"
                    touch "$dir"processed
                    echo "File Processed."
                else
                    echo "File already Unrared."
                fi
            done
            echo "......Going Deeper......"
            recursive "$dir"
        fi
    done
}

recursive /home/user/Complete/
    
por JBurlison 20.04.2017 / 19:45