如何在没有目录结构的情况下使用 tar 归档来自不同目录的文件
Posted
技术标签:
【中文标题】如何在没有目录结构的情况下使用 tar 归档来自不同目录的文件【英文标题】:How to use tar to archive files from different directories without directory structure 【发布时间】:2013-09-07 16:35:48 【问题描述】:我在不同的子目录中有数百到数千个文件,它们都位于一个父目录中,例如
/home/dir1/file1
/home/dir2/file2
/home/dir3/file3
...
/home/dir10000/file10000
如何使用 tar 使我的 tar 存档看起来像这样?
file1
file2
file3
我可以确保文件名是唯一的。我不想包含原始目录结构。
感谢大家的帮助!
【问题讨论】:
【参考方案1】:在没有cat
ing 或|
ing 到其他程序的情况下解决此问题的一种方法:
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 所暗示的不同,如果您有一个长长的文件列表在一个/几个父目录中,您可以在命令行中指定。
【讨论】:
【参考方案2】:GNU tar 将采用一个转换选项,它只是一个 sed 表达式,用于转换存档中的文件名。如果您的文件列表非常大,您可能还想通过管道传输到 xargs。
cat filelist | xargs tar -rvf archive.tar --transform='s|.*/||g'
请记住,这是附加到一个 tar 存档(如果它尚不存在,它将创建一个),因此您需要在运行该命令之前删除该存档(如果它已经存在)。
【讨论】:
【参考方案3】:一种可能的解决方案可能是使用普通的tar
命令(在其stdout 上吐口水),然后将存档通过管道传输到tardy,可能使用其-No_Directories
选项,即
tar cf - /home/dir?/ | tardy -No-Directories > yourbig.tar
但是,我不确定这是一个好主意。将一个 tar 球解压缩到同一目录中的数十万个文件中并不是一个好主意(某些文件系统的行为很糟糕)。
【讨论】:
【参考方案4】:打开命令行并输入
tar -cvf NAME.tar /home/dir1/file1 /home/dir1/file2 /home/dir1/file3
希望这会有所帮助:)
【讨论】:
我有几个不知道名称的 100-10000 个文件。任何其他想法我可以在哪里使用 /home 目录? 这并不能解决 OP 对避免 tarball 中目录结构的担忧 基本上这仍然会在 tar/tgz 中创建文件夹结构以上是关于如何在没有目录结构的情况下使用 tar 归档来自不同目录的文件的主要内容,如果未能解决你的问题,请参考以下文章