0

假设我有一个文件夹:

/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
...

我应该如何编写命令?

4

2 回答 2

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
于 2013-11-03T01:56:23.770 回答
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 操作很长的路的原因是因为虽然你可以做

rm -rf blah-20131103

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

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

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

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

这样,您可以将 rm 与递归和强制标志一起使用,以一次性摆脱整个事情,但是因为您已将目录移动到 /tmp 并在那里完成,所以不会有意外删除任何可能的风险对你很重要。

于 2013-11-04T20:39:27.083 回答