对名称中包含特殊字符的文件使用 find 和 tar

Cos*_*sti 5 linux unix tar find

我想递归地将所有 .ctl 文件存档在一个文件夹中。

tar -cf ctlfiles.tar `find /home/db -name "*.ctl" -print`
Run Code Online (Sandbox Code Playgroud)

错误信息:

tar: Removing leading `/' from member names
tar: /home/db/dunn/j: Cannot stat: No such file or directory
tar: 74.ctl: Cannot stat: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我有这些文件:/home/db/dunn/j 74.ctl 和 j 75。注意额外的空间。如果文件有其他特殊字符怎么办?如何递归归档这些文件?

小智 6

使用-Ttar的特性告诉它从另一个文件中读取文件列表(tar 将每一行视为一个单独的文件)。

然后,您可以使用<()符号让您的 shell 从命令的输出中生成一个伪文件:

tar cf ctlfiles.tar -T <(find /home/db -name "*.ctl")
Run Code Online (Sandbox Code Playgroud)

如果您的 shell 不支持<()表示法,您可以使用临时文件:

find /home/db -name "*.ctl" > ctlfile-list
tar cf ctlfiles.tar -T ctlfile-list
rm ctlfile-list
Run Code Online (Sandbox Code Playgroud)