exclui arquivos vazios e ocultos ao arquivar

0

Eu preciso criar um arquivo de um diretório usando tar em um script de shell , mas também devo excluir arquivos e arquivos ocultos cujo tamanho é igual a 0 . Além disso, o primeiro argumento de linha de comando é a localização do arquivo que deve ser criado, o segundo é o nome do arquivo e o terceiro é o caminho para o diretório cujos arquivos devem ser arquivados. Eu sou um iniciante em scripts de shell, então eu queria saber se havia uma maneira simples de fazer isso. Obrigado

Eu tentei enviar os argumentos como este no meu terminal:

/bin/bash ss1 /home/user arch /home/user/folder

Mas está me dando alguns erros de tar. Eu tentei arquivar assim:

tar -cvf --exclude=.* $1/$2 $3 

Mas não está correto e não sei qual seria a sintaxe correta para isso, e também como excluiria arquivos vazios e ocultos.

    
por ivana14 31.05.2017 / 13:31

2 respostas

5

Como você marcou esse linux , presumimos que você tenha o GNU find e o GNU tar .

Se seus nomes de arquivos não tiverem novas linhas incorporadas e você não quiser arquivar diretórios vazios:

find "$3" -type f \! -empty \! -name '.*' | tar cvf "$1/$2" -T -

find localiza os arquivos relevantes e -T - diz tar para ler a lista de arquivos a serem arquivados de stdin .

Refinando isso, se você quiser incluir diretórios vazios:

find "$3" \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) | \
    tar cvf "$1/$2" -T -

E se você também quiser lidar com nomes de arquivos com novas linhas incorporadas:

find "$3" \( \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) \) -print0 | \
    tar cvf "$1/$2" --null -T -
    
por 31.05.2017 / 13:47
0

Tente isto:

find test/ -not -iname ".*" -not -empty -exec tar --no-recursion -rvf file.tar {} \;

O único problema é que os diretórios vazios não serão incluídos, mas acho que há alguma solução em algum lugar ...

    
por 31.05.2017 / 14:21