Como outros já identificaram, o problema com o seu comando é que ele inclui diretórios, e o tar os arquiva recursivamente. Se um diretório foi modificado recentemente, todos os arquivos contidos nele e seus subdiretórios serão incluídos, tenham eles sido modificados ou não.
Se você não quiser fazer o backup dos metadados do diretório, basta informar find
para não imprimir os nomes dos diretórios. Não é suficiente omitir a raiz: a mesma coisa pode acontecer com os subdiretórios também.
find "$SOURCEDIR" -mtime -1 ! -type d -print | xargs -r tar -rcf "$ARCHIVE"
Usando xargs falha com nomes de arquivos contendo espaços e alguns outros caracteres especiais . Isso é fácil de corrigir: use -exec
em vez de xargs
.
find "$SOURCEDIR" -mtime -1 ! -type d -exec tar -rcf "$ARCHIVE" {} +
Se você quiser fazer backup dos metadados do diretório, deixe find
imprimir tudo e, em vez disso, informe tar
para não recorrer aos subdiretórios. Como find
está fazendo a recursão, tar
não precisa.
find "$SOURCEDIR" -mtime -1 -exec tar -rcf "$ARCHIVE" --no-recursion {} +
Com essa abordagem, você pode evitar o uso de tar -rc
e, em vez disso, resolver o problema de invocações repetidas de tar, primeiro criando um archive apenas com o diretório raiz e, em seguida, anexando-o a ele em lotes. (Por que o diretório raiz? Porque o tar GNU tem medo de criar um arquivo vazio.)
tar -cf "$ARCHIVE" --no-recursion "$SOURCEDIR"
find "$SOURCEDIR" -mindepth 1 -mtime -1 -exec tar -rf "$ARCHIVE" --no-recursion {} +