来自另一个目录的tar文件而不复制它们


10

对于这里的专家来说,这应该非常简单。

我有一个Linux帐户,用户磁盘配额仅为6GB。/opt当压缩达到1GB时,其中包含一些数据文件夹,其中包含约3GB的数据。中有一些符号链接data-folder。通常,为了进行工作备份,我通常执行以下操作。

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

现在我已经消耗了2.5GB的用户磁盘配额,我只有足够的空间来将文件复制到我的家中,但不能tar再复制到我的家中。

有什么方法可以通过单个命令(例如,使用管道)将tar复制和复制文件夹。

附言:我无法/opt读入,因为我只有对的读取权限/opt


您当然可以在/ opt中使用tar,但不能在其中编写,仅此而已。tar(3)的'f'标志表示将结果存储在该文件中,该文件很可能位于其他位置。即,cd /opt; tar zcf $HOME/junk.tar.gz junk
vonbrand 2013年

Answers:


5

您想在需要tar的文件所在的地方创建tar文件吗?

有很多方法可以做到这一点。

如果要在本地创建(=在同一台计算机上):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

您可以在该命令的末尾将其他文件或目录添加到tar中。

如果要远程创建它(即,您要从包含要被映射的数据的主机上在一个远程主机上创建tar文件):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

更高版本的功能非常丰富。例如,您还可以使用相同的技术“复制”目录+子目录:

将目录+子目录复制到另一个本地目录:

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

将目录+子目录复制到另一个远程目录:

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

如果不需要,请删除'v'来显示已压缩(或未压缩)的文件:这样可以加快速度,但是除非出错,否则不会多说。

我使用“。/ ...”作为源来强制tar将其存储为相对路径。在某些情况下,您需要添加其他路径信息:

例如,要压缩crontab文件(包括/ etc中的文件),您可以执行以下操作:

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

我故意使用相对路径:某些旧版本的tar可能很危险,并使用其原始GLOBAL路径提取文件,这意味着您可以这样做:cd /safedir ; tar xvf sometar并且将具有全局名称的文件覆盖其原始路径下的文件,即/ safedir的外部而不是在下面!非常危险,并且仍然可能,因为那里有旧的生产服务器。最好一直使用相对路径,即使您使用较新的tar。


另一个与焦油之间的差异无关:在某些情况下,您可能需要使用-cvf代替cvf,而另一些则无法识别-样式。而z用来表示“与‘压缩’压缩”,但“最近的”焦油是指“压缩用gzip”。您可以通过来了解对文件使用的压缩方式 file zefile。然后相应地对其进行重命名(如果您使用的是tar compress,最好将其重命名为.tar.Z而不是.tar.gz)
Olivier Dulac 2012年

0

使用-htar选项。从手册页:

-h, --dereference
don't archive symlinks; archive the files they point to

所以你可以使用 tar -zcvfh data-folder.tar.gz /opt/data-folder


哦,我应该提到它,我已经尝试过tar -zcvfh〜/ data-folder.tar.gz / opt / data-folder。我正在遇到某种循环存档问题。我一直在复制一些文件,而且永无止境。
Kamath 2012年

看起来在数据的子文件夹中有一个圆形的符号链接。
Kamath 2012年

2
@AUZKamath,这是GNU tar中的错误。你可能想尝试bsdtar,而不是,或paxcd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz),它会检测到循环
斯特凡Chazelas

1
@AUZKamath您可以同时将tar和从主目录中删除的文件tar -rf <tarfilename> <filename>用于添加到现有tar文件中。
harish.venkat 2012年

1
@Stephane Chazelas,它起作用了,您应该把它作为答案。
Kamath 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.