Linha única de comando / script para arquivar uma certa quantidade de pastas

2

Estou procurando um comando de linha única ou um script que arquive 5 pastas em arquivos .tar (nenhum gzip / bzip necessário) em um determinado diretório e exclua as pastas após uma compactação bem-sucedida. Ele tem que usar o nome da pasta original como nome do arquivo para o arquivo também.

Até agora usei o comando atual, que faz apenas um diretório por vez:

tar -c directory > directory.tar && rm -rf directory

Obrigado antecipadamente.

    
por EarthMind 14.05.2010 / 20:05

3 respostas

1

Isso processará os cinco primeiros diretórios no diretório transmitido como argumento para o script.

#!/bin/bash
c=1
for directory in $1/*
do
    if [[ -d "$directory" ]]
    then
        tar -cf "${directory}.tar" "$directory" && rm -rf "$directory"
        if (( c++ > 5 ))
        then
            break
        fi
    fi
done

Estou curioso sobre o motivo do limite.

    
por 14.05.2010 / 21:03
1

é um pouco longo, mas:

for i in dir1 dir2 dir3; do tar -cf $i.tar $i; if [ $? -eq 0 ]; then rm -rf $i; fi; done

editar; tar -cf dir.tar dir é um pouco mais conciso que tar -c dir > dir.tar

script de exemplo:

#!/bin/sh
DIR=$1
tar -cf $DIR.tar $DIR/
if [ $? -eq 0 ]; then
  rm -rf $DIR
fi

você pode colocar isso em script.sh , chmod 755 script.sh e executá-lo como script.sh directory

no entanto, você pode adicionar muito mais a ele, obter uma lista de diretórios do seu diretório principal e até mesmo usar um arquivo para rastrear a última vez que directory foi arquivado, para que você possa definir o máximo, etc.

    
por 14.05.2010 / 20:22
0
for dir in dir1 dir2 dir3 dir4 dir5 ; do tar -c "$dir" > "$dir".tar && rm -rf "$dir" ; done
    
por 14.05.2010 / 20:20