it-swarm.com.de

Wie verschiebe ich die Ausgabe des Befehls find in ein anderes Verzeichnis?

Ich möchte, dass die Ausgabe dieses Befehls find /home -name *.pdf die Dateien im Suchergebnis in ein anderes Verzeichnis verschiebt, z. mit einer Pfeife. Wie kann ich das machen?

6
Fasih Faqoth

Sie brauchen keine Pipe und xargs, um die Dateinamen als Argumente für mv zu definieren.

Verwenden Sie einfach mv in der Aktion -exec von find:

find /home -type f -name '*.pdf' -exec mv -t /destination {} + 
  • Ersetzen Sie /destination durch das tatsächliche Zielverzeichnis
  • find behandelt alle möglichen Dateinamen
  • find verarbeitet ARG_MAX, indem so viele Dateinamen auf einmal übergeben werden, dass ARG_MAX nicht ausgelöst wird
  • Wenn Sie nur nach Dateien suchen (vermutlich in diesem Fall), begrenzen Sie den Suchvektor, indem Sie -type f hinzufügen.
  • Zitieren Sie die Glob-Erweiterung '*.pdf', damit Shell sie vorher nicht erweitert, da find sie behandelt

Wenn Sie aus irgendeinem Grund oder zu Lernzwecken die Pipe -xargs verwenden müssen:

find /home -type f -name '*.pdf' -print0 | xargs -0 mv -t /destination  
13
heemayl

Wenn die Namen Ihrer PDFs keine Leerzeichen enthalten, können Sie diesen Befehl auch in Ihrem Terminal ausführen:

mv $(find /home -type f -name '*.pdf') ./destination

Die Funktion $() wendet die Ausgabe des Befehls run (find /home -type f -name '*.pdf') auf den Befehl außerhalb des Befehls (mv [...] ./destination) an.

0
anonymous2