tar文件夹/文件有不同的内部路径?

时间:2013-11-03 01:50:11

标签: shell tar

说我有一个文件夹:

/home/user/blah
/home/user/blah/file1
/home/user/blah/file2
...

我想将其压缩到具有内部结构的文件/home/user/backup/blah-20131103.tar中:

blah-20131103
blah-20131103/file1
blah-20131103/file2
...

我应该怎么写命令?

2 个答案:

答案 0 :(得分:3)

看起来gnu tar有一个--transform选项可以使用:

tar cf ~/backup/blah-20131103.tar --transform='s|^/home/user/blah/|blah-20131103/|' ~/blah

如果您没有gnu tar,请使用您想要的名称创建一个符号链接,并使用H选项。

cd
ln -s blah{,-20131103}
tar cfH backup/blah-20131103.tar blah-20131103
rm blah-20131103

答案 1 :(得分:0)

据我所知,这应该有效。我以前用内部目录树制作了备份tarball。

cd /home/usr/ # To put you one level above "blah."

mv blah blah-20131103

tar jcvf blah-20131103.tar.bz2 blah-20131103 # This command compresses with bzip2.

cd blah-20131103
rm -v file1 file2
cd ..
rmdir blah-20131103 

我之所以做长跑的原因,是因为虽然你可以做到

rm -rf blah-20131103

如果你输了一个错字,这是非常危险的。如果你进入目录本身,删除没有rm的递归或强制标志的文件,然后cdup并使用rmdir去除文件,这样更安全,因为你可以确保命令只有权力摆脱你想要的具体文件。如果你犯了错误,它不会伤害你。

我也总是对rm使用-v标志(详细),以确保我得到它的作用的书面记录。如上所述,如果您不小心,rm可能会产生灾难性后果,因此您必须非常谨慎,并确保它只具有适当的功能,才能做您想做的事情,而不是更多。

更安全的策略是这样做: -

mv blah-20131103 /tmp
cd /tmp
rm -rf blah-20131103
cd ~

这样你就可以使用带有递归和强制标志的rm来一次性删除整个东西,但是因为你已经将目录移动到/ tmp并在那里完成了,所以没有意外删除任何东西的风险这对你很重要。