从子目录中的文本文件中查找文件列表并放入 tarball?

Ste*_*eve 1 unix bash tar archiving

我有一个需要 tar 的文件列表。通常,我会使用

tar -cvf allfiles.tar -T mylist.txt

但我发现我需要的文件分散在子目录中,我的列表只有文件名而不是路径。

有没有办法将“查找”与 tar 命令结合起来,以在我的列表中查找文件在子目录中的任何位置?

Rub*_*ens 5

您可以使用名称和 列表找到路径find,但是当您在不同目录中具有相同名称的文件时,您可能会遇到一些小问题。

如果这并不重要,您可以执行以下操作:

find <main_directory> | grep -f mylist.txt
Run Code Online (Sandbox Code Playgroud)

然后,将列表用于您的tar命令。完整的命令可能如下所示:

tar cvf allfiles.tar -T <(find <main_directory> |
    grep -f mylist.txt --color=never)
Run Code Online (Sandbox Code Playgroud)

请注意,您必须使用--color=never,否则,如果您的 grep 的颜色处于活动状态,您将发送无效的tar.

要忽略大小写区别,在这种情况下,grep实际上是过滤文件的in ,您可以简单地添加标志-i

tar cvf allfiles.tar -T <(find <main_directory> |
    grep -i -f mylist.txt --color=never)
Run Code Online (Sandbox Code Playgroud)

  • @Steve 当你执行一个命令时,用 `&lt;()` 支撑它,你告诉 shell 把正在执行的命令的输出视为一个文件本身,它会返回一个文件描述符——也就是说,然后,作为 `tar ... -T &lt;file&gt;` 的 `&lt;file&gt;` 参数给出。请注意,换行只是为了避免滚动条出现在那里;命令本身没有换行符。 (2认同)