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
findDie 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 \;