我在不同的子目录中有数百到数千个文件,它们都位于一个父目录中,例如
/home/dir1/file1
/home/dir2/file2
/home/dir3/file3
...
/home/dir10000/file10000
如何使用 tar 使我的 tar 存档看起来像这样?
file1
file2
file3
我可以确保文件名是唯一的。我不想包含原始目录结构。
谢谢大家的帮助!
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
中有很长的文件列表,则无需通过管道传输。
GNU tar 将采用一个转换选项,它只是一个 sed 表达式,用于转换存档中的文件名。如果您的文件列表非常大,您可能还想通过管道传输到 xargs。
cat filelist | xargs tar -rvf archive.tar --transform='s|.*/||g'
请记住,这是附加到一个 tar 存档(如果它尚不存在,它将创建一个),因此您需要在运行该命令之前删除该存档(如果它已经存在)。
一种可能的解决方案可能是使用普通tar
命令(在其stdout上吐口水),然后将存档通过管道传输到tardy,可能带有它的 -No_Directories
选项,即
tar cf - /home/dir?/ | tardy -No-Directories > yourbig.tar
但是,我不确定这是一个好主意。将一个 tar 球解压缩到同一目录中的数十万个文件中并不是一个好主意(某些文件系统对此表现不佳)。
打开命令行并输入
tar -cvf NAME.tar /home/dir1/file1 /home/dir1/file2 /home/dir1/file3
希望这可以帮助 :)