Почему cpio говорит «ПРЕДУПРЕЖДЕНИЕ! Эти имена файлов не были выбраны» при копировании большого количества файлов?

602
mmm bacon

Более 10 лет я использую эту стратегию для копирования большого количества файлов между файловыми системами 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, а целевой каталог - файловая система NFS с сервера OpenSolaris. Копирование по NFS никогда не было проблемой в прошлом. В именах файлов нет ничего странного, так как здесь нет специальных символов или чего-то в этом роде.

Есть идеи?

0

1 ответ на вопрос

1
Chris Johnsen

Используется ли исходная иерархия каталогов чем-то, пока вы делаете копию? Мне удалось вывести это сообщение об ошибке (и некоторые другие), когда я даю ему пути, которые не существуют:

% 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> logfileчтобы сохранить вывод stderr в файл.

Вы можете оказаться в этой же ситуации, если хотя бы один процесс удалит файл между тем, когда find печатает его пути и когда cpio открывает его для чтения. Это условие гонки . Гонка начинается с поиска (когда он читает каталог, найден определенный путь (в конечном итоге печатается его путь)), а участниками являются cpio (выигрывает при успешном открытии пути для чтения) и какой-то другой процесс (выигрывает при удалении путь до того, как cpio откроет его).