Warum sagt cpio beim Kopieren einer großen Anzahl von Dateien "WARNUNG! Diese Dateinamen wurden nicht ausgewählt"?

680
mmm bacon

Seit über 10 Jahren verwende ich diese Strategie, um eine große Anzahl von Dateien zwischen UNIX-Dateisystemen zu kopieren :

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

Es funktioniert wie ein Champion. Ich bekomme jetzt jedoch diesen Fehler von cpio:

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

Das Quellverzeichnis befindet sich unter OSX 10.5 und das Zielverzeichnis ist ein NFS-Dateisystem eines OpenSolaris-Servers. Das Kopieren von NFS war in der Vergangenheit noch nie ein Problem. Die Dateinamen sind nicht ungewöhnlich, dh es gibt keine Sonderzeichen oder ähnliches.

Irgendwelche Ideen?

0

1 Antwort auf die Frage

1
Chris Johnsen

Wird die Quellverzeichnishierarchie während des Kopierens von etwas verwendet? Ich konnte diese Fehlermeldung (und einige andere) auslösen, wenn ich ihnen Pfadnamen gebe, die nicht vorhanden sind:

% 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 

Ich bekomme aber auch diese früheren erklärenden Fehlermeldungen. Vielleicht bekommen Sie so viele davon, dass Sie die erstere nicht sehen können. Sie können versuchen, die Ausgabe mit cmd 2> logfilezu speichern, um die Ausgabe von stderr in einer Datei zu speichern.

Sie könnten in derselben Situation enden, wenn mindestens ein anderer Prozess eine Datei löscht, wenn find seine Pfadnamen druckt und wenn cpio sie zum Lesen öffnet. Dies ist eine Rennbedingung . Das Rennen wird durch find gestartet (wenn das Verzeichnis gelesen wird, ein bestimmter Pfadname vorhanden ist (möglicherweise wird der Pfadname gedruckt)) und die Teilnehmer sind cpio (gewinnt, wenn der Pfadname zum Lesen erfolgreich geöffnet wurde) und ein anderer Prozess (gewinnt, wenn das Verzeichnis gelöscht wird Pfadname bevor cpio es öffnet).