Estou tentando usar o tar(1) para criar um arquivo de arquivos mais recentes que um arquivo específico ( fileA
). No entanto, quando uso find(1) para obter a lista de arquivos a serem passados para o tar, alguns arquivos são listados várias vezes:
$ touch fileA
$ mkdir test
$ touch test/{fileB,fileC}
$ tar -c -v $(find test -newer fileA) > test.tar
test/
test/fileC
test/fileB
test/fileC
test/fileB
Usar xargs(1) para passar a lista de arquivos para tar resulta em um comportamento semelhante:
$ find test -newer fileA | xargs tar -c -v > test.tar
test/
test/fileC
test/fileB
test/fileC
test/fileB
Usar sort(1) e uniq(1) para remover duplicatas também não funciona:
$ find test -newer fileA | sort | uniq | xargs tar -c -v > test.tar
test/
test/fileC
test/fileB
test/fileB
test/fileC
Existe uma maneira de o tar incluir apenas cada arquivo mais recente de fileA
uma vez?
Edit: Estou procurando especificamente uma solução que não envolva extensões GNU para tar (por exemplo, que funcionaria com suckless tar ).
encontra o
test
diretório, bem como os arquivos individuais nele, entãotar
adicionatest
(e todo o seu conteúdo), entãotest/fileB
etest/fileC
.Aperte o seu
find
para evitar isso:Observe que usar a substituição de comandos dessa maneira pode causar problemas, por exemplo , com nomes de arquivos contendo espaços ou curingas; para evitar isso, use
(com GNU
find
etar
), ou(supondo que você não tenha muitos arquivos para arquivar).
Você pode tentar algo como: