说我有一个文件夹:
/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
...
我应该怎么写命令?
答案 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并在那里完成了,所以没有意外删除任何东西的风险这对你很重要。