Eu usaria a solução na resposta de Rinzwind. Não há nenhum motivo real para evitar o cd
; especialmente se você colocar isso em um shell script, pois o cd
afetará apenas o script, não o shell do qual você chama o script.
Se você realmente não quiser usar cd
, use a opção tar
s --transform
:
gbl@roran:~$ tar -cf /tmp/archive.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive.tar
home/gbl/Temp/a.out
gbl@roran:~$ tar --transform 's/^home\/gbl//' -cf /tmp/archive2.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive2.tar
/Temp/a.out
gbl@roran:~$ tar --transform 's/^home\/gbl\///' -cf /tmp/archive3.tar /home/gbl/Temp/a.out
gbl@roran:~$ tar -tf /tmp/archive3.tar
Temp/a.out
Eu omiti algumas mensagens de tar: Removing leading '/' from member names
aqui, pois elas não contribuem para a resposta.
Use qualquer expressão regular sed
para a transformação, leia o manual para mais algumas opções.
Há também --strip-components
para remover muitos componentes de caminho do início do nome do arquivo, mas ele funciona somente na extração, não quando você cria um arquivo.
No entanto, isso é restrito ao gnu tar, então você ficará bem no Linux, mas provavelmente não sempre que mudar para MacOS, Solaris ou AIX. Qual é outro motivo para evitá-lo, especialmente porque existe uma solução fácil e diferente ( cd
first).