5

我在不同的子目录中有数百到数千个文件,它们都位于一个父目录中,例如

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

如何使用 tar 使我的 tar 存档看起来像这样?

file1
file2
file3

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

谢谢大家的帮助!

4

4 回答 4

6

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 所暗示的不同,如果您可以在命令行上指定的单个/几个父目录xargs中有很长的文件列表,则无需通过管道传输。

于 2016-07-10T23:06:11.003 回答
3

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

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

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

于 2013-09-07T17:13:27.813 回答
2

一种可能的解决方案可能是使用普通tar命令(在其stdout上吐口水),然后将存档通过管道传输到tardy,可能带有它的 -No_Directories选项,即

 tar cf - /home/dir?/ | tardy -No-Directories > yourbig.tar

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

于 2013-09-07T16:50:23.763 回答
-3

打开命令行并输入

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

希望这可以帮助 :)

于 2013-09-07T16:41:23.460 回答