Ich habe eine Liste bestimmter Dateien, die mit dem folgenden Befehl angezeigt werden. Wie kann ich diese Dateien jedoch in einen anderen Ordner kopieren, beispielsweise ~/test?
find . -mtime 1 -exec du -hc {} +
Zu Eric Jablows Antwort kommt noch eine mögliche Lösung (es hat für mich funktioniert - Linux Mint 14/Nadia)
find /path/to/search/ -type f -name "glob-to-find-files" | xargs cp -t /target/path/
Sie können sich auf " beziehen. Wie kann ich mit xargs Dateien kopieren, deren Namen Leerzeichen und Anführungszeichen enthalten? ".
Tatsächlich können Sie die Ausgabe des Befehls find
in einem Kopierbefehl auf zwei Arten verarbeiten:
Wenn die Ausgabe des Befehls find
kein Leerzeichen enthält, d. H. Wenn der Dateiname kein Leerzeichen enthält, können Sie Folgendes verwenden:
Syntax:
find <Path> <Conditions> | xargs cp -t <copy file path>
Example:
find -mtime -1 -type f | xargs cp -t inner/
Da unsere Produktionsdatendateien jedoch möglicherweise Leerzeichen enthalten, ist dieser Befehl in den meisten Fällen wirksam:
Syntax:
find <path> <condition> -exec cp '{}' <copy path> \;
Example
find -mtime -1 -type f -exec cp '{}' inner/ \;
Im zweiten Beispiel, dem letzten Teil, wird das Semikolon ebenfalls als Teil des Befehls find
betrachtet und sollte vor dem Drücken von escaped werden Enter. Andernfalls erhalten Sie eine Fehlermeldung wie:
find: missing argument to `-exec'
find /PATH/TO/YOUR/FILES -name NAME.EXT -exec cp -rfp {} /DST_DIR \;
Wenn Sie GNU suchen, finden Sie
find . -mtime 1 -exec cp -t ~/test/ {} +
Dies funktioniert ebenso wie das Paspeln der Ausgabe in xargs
, wobei die Fallstricke dabei vermieden werden (es behandelt eingebettete Leerzeichen und Zeilenumbrüche, ohne find ... -print0 | xargs -0 ...
zu verwenden).
verschiebt die gefundenen Dateien relativ zu ihrem aktuellen Verzeichnis (nicht zu Ihrem aktuellen Verzeichnis) nach oben
find . -path "*/yourfolder/*" -type f -execdir mv {} .. \;