it-swarm.com.de

Wie verschieben oder kopieren Sie Dateien, die mit dem Befehl "find" in Unix aufgelistet sind?

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 {} +
38
L P

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? ".

63
Ankur

Tatsächlich können Sie die Ausgabe des Befehls find in einem Kopierbefehl auf zwei Arten verarbeiten:

  1. 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/
    
  2. 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'
30
Thiyagu ATR
find /PATH/TO/YOUR/FILES -name NAME.EXT -exec cp -rfp {} /DST_DIR \;
12
Laith Al Obaidy

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).

4
kbolino

verschiebt die gefundenen Dateien relativ zu ihrem aktuellen Verzeichnis (nicht zu Ihrem aktuellen Verzeichnis) nach oben

find . -path "*/yourfolder/*" -type f -execdir mv {} .. \;
0
danday74