Tar remoto dir sem levar ./ nos arquivos

0

Eu tenho vários scripts que executam e coletam dados que são então alimentados em outros scripts. Então toda essa cadeia é automatizada. Em um ponto da automação, todos os arquivos de dados são bloqueados para serem enviados para processamento. O comando que estou usando é este:

tar -zchvf "$target_dir" -C "$data_dir" .

Onde target_dir é onde meu tarball está indo e data_dir é onde meus dados estão localizados.

Agora isso está funcionando bem; no entanto, os arquivos no meu tarball são assim:

./file1
./file2
 <etc>

O script de pós-processamento está bagunçado por causa do ./ nesses arquivos. Espera que eles sejam assim:

file1
file2
<etc>

Eu olhei para a página de manual e nada realmente me destaca para remover o líder ./ no processo de alcatrão. Uma coisa que eu estava pensando em fazer era mudar o roteiro para o seguinte ...

cd $data_dir; tar -zchvf "$target" *; cd -

mas isso parece muito errado para mim e eu acredito que há algo mais idiota que estou perdendo.

Estou usando o bash v3.2.5 como referência.

    
por Sharki 24.07.2018 / 18:06

2 respostas

1

Se você usar o gnu tar, você pode editar os nomes dos arquivos no caminho para o tar:

$ mkdir -p a/b
$ cd a
$ tar cf - --transform='s:^./::' . | tar tvf - 
drwxr-xr-x        0 2018-07-24 18:18 ./
drwxr-xr-x        0 2018-07-24 18:18 b/
    
por 24.07.2018 / 18:21
0

Lendo a documentação de tar 1.15.1 , lançada em 2004-12-21, do link de download link está incluído tar.info para ter certeza:

6.3 Reading Names from a File
[...]

--files-from=FILE NAME' '-T FILE NAME' Get names to extract or create from file FILE NAME.

If you give a single dash as a file name for '--files-from', (i.e., you specify either '--files-from=-' or '-T -'), then the file names are read from standard input.

Agora para ls , parte de coreutils , lendo coreutil.info de coreutils-5.0 de 2003-04-02 ( link ), antes de tar 1.15.1 :

'-A'
'--almost-all'
List all files in directories except for '.' and '..'.

Portanto, isso deve funcionar como desejado (parênteses estão lá para esquecer o cd , você provavelmente poderia fazer cd - ou simplesmente não se importar):

( cd "$data_dir" && ls -A | tar -zchvf "$target_file" -T - ) 
    
por 25.07.2018 / 03:14

Tags