我在不同子目录中有几百到几千个文件,这些文件都位于一个父目录中,例如
/home/dir1/file1
/home/dir2/file2
/home/dir3/file3
...
/home/dir10000/file10000
我如何使用tar,所以我的tar档案看起来像这样?
file1
file2
file3
我可以确保文件名是唯一的。我不想包含原始目录结构。
谢谢你帮助大家!
答案 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
希望这会有所帮助:)