it-swarm.com.de

Wie verschiebe ich Dateien aus Unterverzeichnissen mit der angegebenen Erweiterung rekursiv in einen Zielordner?

Ich möchte alle *.txt -Dateien aus allen Unterverzeichnissen in einem bestimmten Verzeichnis in ein Zielverzeichnis verschieben.

Wenn Sie wie folgt vorgehen, wird JEDE Datei verschoben. Wie kann ich sie auf alle *.txt -Dateien reduzieren?

find -type f -print0|xargs -0r mv -it "/path to my folder/destination-directory"
9
Middi

Verwenden Sie ein Glob-Muster mit der Option -name von find, um das gewünschte Muster anzugeben, in Ihrem Fall *.txt:

find . -type f -name '*.txt' -exec mv -t /destination {} +

Ersetzen Sie /destination natürlich durch das tatsächliche Zielverzeichnis.

Anmerkungen:

  • Sie müssen nicht xargs und eine anonyme Pipe erzeugen. Verwenden Sie die mv-Logik im -exec-Prädikat von find.

  • find ... -exec verarbeitet alle möglichen Dateinamen und ARG_MAX

  • GNU mv (in Ubuntu standardmäßig) hat -t, um ein Zielverzeichnis zu verwenden, sodass Sie das +-Argument von -exec nutzen können, um alle Dateien in einem Durchlauf von mv (oder zumindest) zu senden minimale Ausführung, wenn ARG_MAX ausgelöst wird)

11
heemayl

Fügen Sie einen -name Test hinzu

find -type f -name "*.txt" -print0 |...

Vergessen Sie nicht, den Glob anzugeben, um Shell-Erweiterungen zu verhindern.

Verwenden Sie für die Suche ohne Berücksichtigung der Groß-/Kleinschreibung -iname anstelle von -name

6
Zanna
find /folder/ -type f -name "*.txt" -exec mv {} /other/folder/ \;

Ich habe das getestet, funktioniert gut.

3
Seth

Verwenden Sie Ihren ursprünglichen Befehl:

find . -type f -name "*.txt" -print0|xargs -0r mv -it /path/to/destination

Die Info:

  1. .: Suche am aktuellen Ort

  2. "*.txt": Dateien mit der Erweiterung .txt im Namen

2
George Udosen