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

Есть идеи?

1 ответ1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .