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 -