excluir arquivos vazios e ocultos ao arquivar

excluir arquivos vazios e ocultos ao arquivar

Eu preciso criar um arquivo de um diretório usandotar em um script de shellmas também devo excluir arquivos ocultos e arquivos cujo tamanho seja igual a 0. Além disso, o primeiro argumento da 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.

Tentei enviar os argumentos assim no meu terminal:

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

Mas isso está me causando alguns erros de tar. Tentei arquivar assim:

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

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

Responder1

Já que você marcou isso, linuxpresumo que você tenha GNU finde 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 -

findencontra os arquivos relevantes e -T -diz tarpara ler a lista de arquivos para arquivar 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émdeseja 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 -

Responder2

Experimente isto:

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

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

informação relacionada