Estou tentando criar um programa gráfico para o meu script.
Dentro do script eu uso o tar para criar um arquivo tar.
No programa gráfico, recebo 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 um arquivo apenas incluindo o selecteddir.
dirname
para extrair tudo até "selecteddir" ebasename
extrair "selecteddir". Experimente os dois comandos com o caminho $ como argumento.tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'
não vai funcionar.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 do que você deseja compactar. Nesse caso seriadir2
.A segunda maneira é usar a opção
--transform
que pega umased
expressão e a executa nos nomes dos arquivos. Nota: você terá que escapar/
nased
expressão.fonte
tar: Cowardly refusing to create an empty archive
. Quando eu tenho o ponto, irritantemente faz com que a raiz contenha um diretório chamado.
. Então, perto, mas não perfeito.$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *
trabalhou para mim. Usando asterisco em vez de um ponto.
. Atualização: Woops - Embora eu tenha perdido os arquivos ocultos.Primeiro, vá para o diretório de trabalho,
Então use magia
*
:-)fonte
Na verdade, encontrei um problema ao usar a resposta de Ketan
Quando você deseja copiar todos os arquivos apenas no dir2, apenas todos os arquivos, então eu tento a idéia:
No entanto, quando você não está no diretório dir2, isso causaria problemas, pois * causaria arquivos tar no seu diectroy atual. E corrigi o problema usando o comando abaixo:
fonte
.
uma pasta raiz.