为什么 cpio 在复制大量文件时会显示“警告!未选择这些文件名”?

为什么 cpio 在复制大量文件时会显示“警告!未选择这些文件名”?

十多年来,我一直在使用此策略在 UNIX 文件系统之间复制大量文件

cd source_directory
find . -depth -print | cpio -pdm /path/to/destination_directory

它运行良好。但是,我现在从 cpio 收到此错误:

cpio: WARNING! These file names were not selected:
(long list of files here...)

源目录位于 OSX 10.5 上,目标目录是来自 OpenSolaris 服务器的 NFS 文件系统。过去通过 NFS 复制从未出现过问题。文件名没有什么奇怪的,也就是说没有特殊字符或类似的东西。

有任何想法吗?

答案1

复制时源目录层次结构是否被某些东西使用?当我给它提供不存在的路径名时,我能够引出该错误消息(以及其他一些消息):

% ls foo bar baz
ls: bar: No such file or directory
ls: foo: No such file or directory
baz
!1% # Only baz exists.
!1% printf %s\\\\n foo bar baz | cpio -odm > /dev/null
cpio: Unable to access foo <No such file or directory>
cpio: Unable to access bar <No such file or directory>
cpio: WARNING! These file names were not selected:
foo
bar

但是我也收到了那些较早的其他解释性错误消息。也许您收到了太多后者,以至于看不到前者。您可以尝试使用将cmd 2> logfilestderr 输出保存到文件中来保存输出。

如果在以下情况下至少有一个其他进程删除了文件,则可能会遇到同样的情况:寻找打印其路径名以及何时太平洋保险协会打开它进行阅读。这是一个竞争条件. 比赛开始于寻找(当它读取目录时,发现存在特定的路径名​​(最终打印其路径名))参赛者是太平洋保险协会(成功打开路径名进行读取时获胜)和其他一些进程(在删除路径名之前获胜)太平洋保险协会打开它)。

相关内容