Sie müssen cp -t /home/shantanu/tosend
verwenden um ihm mitzuteilen, dass das Argument das Zielverzeichnis und keine Quelle ist. Sie können es dann in -exec ... +
ändern um cp
zu erhalten um so viele Dateien wie möglich auf einmal zu kopieren.
Wenn Sie die gefundenen Dateien in /home/shantanu/tosend
kopieren möchten , haben Sie die Reihenfolge der Argumente bis cp
umgekehrt:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend \;
Bitte beachten:die find
Befehl verwenden Sie {}
als Platzhalter für passende Datei.
Ich stand vor einem Problem wie diesem ...
Tatsächlich können Sie find
auf zwei Arten verarbeiten Befehlsausgabe in copy
Befehl
-
Wenn
find
Die Ausgabe des Befehls enthält kein Leerzeichen, dh wenn der Dateiname kein Leerzeichen enthält, können Sie den folgenden Befehl verwenden:Syntax:
find <Path> <Conditions> | xargs cp -t <copy file path>
Beispiel:
find -mtime -1 -type f | xargs cp -t inner/
-
Aber die meiste Zeit enthalten unsere Produktionsdatendateien möglicherweise Platz. Daher ist der unten erwähnte Befehl meistens sicherer:
Syntax:
find <path> <condition> -exec cp '{}' <copy path> \;
Beispiel
find -mtime -1 -type f -exec cp '{}' inner/ \;
Im zweiten Beispiel wird der letzte Teil, d. h. Semikolon, auch als Teil von find
betrachtet Befehl, der maskiert werden sollte, bevor die Eingabetaste gedrückt wird. Andernfalls erhalten Sie eine Fehlermeldung wie diese
find: missing argument to `-exec'
In Ihrem Fall ist die Syntax des Kopierbefehls falsch um find file in /home/shantanu/tosend
zu kopieren . Der folgende Befehl funktioniert:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;