
Estou tentando criar um programa gráfico para meu script.
Dentro do script eu uso tar para criar um arquivo tar.
No programa gráfico, obtenho o nome completo do arquivo que desejo criar um arquivo tar.
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
Meu arquivo tar inclui home, nome de usuário, dir1, dir2 e selecteddir, enquanto eu quero que o tar crie o arquivo incluindo apenas o selectdir.
Responder1
Você pode usar a -C
opção de tar
para fazer isso:
tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir
Na página de manual de tar
:
-C directory
In c and r mode, this changes the directory before adding the following files.
In x mode, change directories after opening the archive but before extracting
entries from the archive.
Responder2
Existem dois métodos que você pode usar para abordar esse problema.
O primeiro, na minha opinião, é mais fácil. Simplesmente cd
no diretório diretamente acima daquele que você deseja compactar. Neste caso seria dir2
.
$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir
A segunda maneira é usar a opção --transform
que pega uma sed
expressão e a executa nos nomes dos arquivos. Nota: você terá que escapar /
na sed
expressão.
$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'
Responder3
Primeiro, vá para o diretório de trabalho,
cd /your/working/directory/
Então use magia *
:-)
tar -cvf temp.tar *
Responder4
Para evitar esse ponto dir, você pode removê-lo após o fato:
tar czC /path/to/dir . --transform='s,^\./,,' >| foo.tgz
Isso criará um arquivo com apenas oconteúdode /path/to/dir
.