Existem vários problemas com o seu comando.
O primeiro é um arquivo compactado não pode ser atualizado. Você precisaria primeiro criar um arquivo descompactado, atualizá-lo e, finalmente, compactá-lo.
O segundo é que a sintaxe tar
está incorreta, a primeira cláusula -exec
deve usar o +
terminator ou o \;
, mas não os dois.
O terceiro é mais sutil e ocorre se você mantiver o +
terminator, a segunda cláusula -exec
será executada para cada arquivo em sequência, enquanto o primeiro aguardará a lista de arquivos para salvar o arquivo. seqüência de ambiente a ser lançada. Quando isso acontecer, todos os arquivos a serem armazenados pelo primeiro -exec
já terão sido excluídos pelo segundo -exec
, então tar
falhará e você perderá todos os seus arquivos.
Como não há dúvida de que você está usando GNU tar
, aqui está uma maneira simples de alcançar o que você deseja:
tar --files-from <(find . \( -name "*.c" -o -name "*.sh*" \)) \
--remove-files -cjf mycompress.bz2.tar
O GNU tar é documentado para remover os arquivos somente depois de salvos:
$ man gtar
...
--remove-files
remove files after adding them to the archive
...
Observe que o comando que sugeri não processará arquivos com uma nova linha incorporada, mas esse deve ser um evento bastante improvável.