我有一个需要 tar 的文件列表。通常,我会使用
tar -cvf allfiles.tar -T mylist.txt
但我发现我需要的文件分散在子目录中,并且我的列表只有文件名而没有路径。
有没有办法将“find”与 tar 命令结合起来,以便查找列表中的文件,无论它们位于子目录中的哪个位置?
答案1
您可以使用名称列表和来找到路径find
,但是您可能会遇到一个小问题,即当不同目录中有同名的文件时。
如果这并不重要,你可以执行以下操作:
find <main_directory> | grep -f mylist.txt
然后,将列表用于tar
命令。完整的命令可能如下所示:
tar cvf allfiles.tar -T <(find <main_directory> |
grep -f mylist.txt --color=never)
注意到你必须使用--color=never
,否则,如果您的 grep 启用了颜色,那么您将发送无效的输入tar
。
忽略大小写区别,在本例中,grep
实际上是过滤文件,您只需添加标志-i
:
tar cvf allfiles.tar -T <(find <main_directory> |
grep -i -f mylist.txt --color=never)