'tar' com 'find' removendo a extensão do arquivo original

1

Eu quero criar tb2 arquivos do grupo de arquivos de texto como este. tar cfj $(basename ./2014_04_09.txt .txt).tb2 $(basename ./2014_04_09.txt)

Com este comando, posso criar um arquivo archive 2014_04_09.tb2 que não contenha um diretório.

Mas quando o comando é aplicado com a opção -exec de find ,

find . -name "*.txt" -exec tar cfj $(basename "{}" .txt).tb2 $(basename "{}") \;

Este comando cria arquivos archive com extensão original ( 2014_04_09.txt.tb2 ) e com um diretório dentro do arquivo.

Como posso usar o comando tar com find como quando ser aplicado apenas um único arquivo.

    
por ironsand 09.04.2014 / 06:02

1 resposta

2

Você precisa -exec de um comando shell:

find . -name "*.txt" -exec sh -c 'tar cfj $(basename "{}" .txt).tb2 "{}"' -- {} \;

Além disso, observe que o comando find está localizando os arquivos em todos os níveis. Como tal, usar basename para passar a lista de arquivos não funcionaria se os arquivos não existissem no diretório atual.

Para elaborar,

tar cfj foo.tb2 foo.txt

resultaria em erros se foo.txt não existir no diretório atual. Como tal, você precisa passar o caminho para foo.txt .

    
por 09.04.2014 / 06:10