如何使用tar来存档不同目录结构的不同目录中的文件

时间:2013-09-07 16:35:49

标签: linux tar

我在不同子目录中有几百到几千个文件,这些文件都位于一个父目录中,例如

/home/dir1/file1
/home/dir2/file2
/home/dir3/file3
...
/home/dir10000/file10000

我如何使用tar,所以我的tar档案看起来像这样?

file1
file2
file3

我可以确保文件名是唯一的。我不想包含原始目录结构。

谢谢你帮助大家!

4 个答案:

答案 0 :(得分:6)

在没有cat|其他程序的情况下解决此问题的一种方法:

tar --transform 's,.*/,,g' -cvf mytarfile.tar /path/to/parent_dir

# --transform accepts a regular expression similar to sed.
#   I used "," as a delimiter so I don't have to escape "/"
#   This will replace anything up to the final "/" with ""
#   /path/to/parent_dir/sub1/sub2/subsubsub/file.txt -> file.txt
#   /path/to/parent_dir/file2.txt -> file2.txt

与Aaron Okano暗示不同,如果您在命令行中指定的单个/少数父目录中有很长的文件列表,则无需管道xargs

答案 1 :(得分:3)

GNU tar将采用转换选项,它只是一个转换存档中文件名的sed表达式。如果您的文件列表非常大,您可能还想管道到xargs。

cat filelist | xargs tar -rvf archive.tar --transform='s|.*/||g'

请记住,这会附加到tar存档(如果它尚不存在,它将创建一个存档),因此如果存档在运行该命令之前已经存在,则需要删除存档。

答案 2 :(得分:2)

一个可能的解决方案可能是使用普通的tar命令(在 stdout 上随地吐痰),然后将归档管道导入tardy,可能使用{{1}选项,即

-No_Directories

但是,我不确定这是个好主意。将tar球提取到同一目录中的数十万个文件中并不是一个好主意(某些文件系统表现不佳)。

答案 3 :(得分:-3)

打开命令行并输入

tar -cvf NAME.tar /home/dir1/file1 /home/dir1/file2 /home/dir1/file3

希望这会有所帮助:)