如何在没有目录结构的情况下使用 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】:

在没有cating 或|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 归档来自不同目录的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在不添加目录层次结构的情况下使用 Python 将文件添加到 tarfile?

如何在没有顶层目录的情况下创建 tar 文件

在Linux 中如何归档文件和目录

如何在没有父目录的情况下对目录进行 tar [关闭]

时如何去除目录结构及其解压到指定目录 (

如何在没有一些文件夹的情况下创建 tar 存档?