Script Bash para executar uma ação em cada subdiretório em um diretório

5

Supondo que eu tenha uma estrutura de diretório como

Dir1/
  SubDir1/
  SubDir2/
  SubDir3/

Eu gostaria de poder passar 'Dir1' para um script bash e, em seguida, executar uma ação em todos os seus subdiretórios (SubDir1, SubDir2, SubDir3).

Obrigado pela sua ajuda!

    
por evan 20.01.2011 / 01:39

3 respostas

7

Como parece que você está executando tar , provavelmente a melhor maneira é:

basedir=$1
for dir in "$basedir"/*; do
    if test -d "$dir"; then
        tar -cvf "$dir".tar "$dir"
        rm -r "$dir"
    fi
done

Se você quiser usar find , você deve adicionar -maxdepth 1 , para evitar a criação de arquivos extras.

basedir=$1
for dir in $(find "$basedir" -mindepth 1 -maxdepth 1 -type d); do
    tar -cvf "$dir.tar" "$dir"
    rm -r "$dir"
done

Observe também que, em tar -cvf , o nome do arquivo de saída vem primeiro (logo após o f ).

    
por 20.01.2011 / 02:36
1
find Dir1 -mindepth 1 -type d -exec dosomethinghere {} \;
    
por 20.01.2011 / 01:41
0

Se você estiver usando o GNU find , você pode usar o parâmetro -execdir , por exemplo:

find . -type d -depth 1 -execdir echo Action on $(pwd)/{} ';'
    
por 04.10.2015 / 15:54

Tags