Wie finde ich bestimmte Dateien und verschiebe sie mit demselben Befehl in ein neues Verzeichnis?

Wie finde ich bestimmte Dateien und verschiebe sie mit demselben Befehl in ein neues Verzeichnis?

Ich habe mich also umgesehen und nur herausgefunden, wie das geht, wenn das Verzeichnis bereits erstellt ist, und zwar so:

find source -name '*.z' -exec cp {} destination \;

Aber wie kann ich mit demselben Befehl ein neues Verzeichnis erstellen, in das ich diese Dateien senden möchte? Folgendes habe ich versucht, aber ohne Erfolg:

find source -name '*.z' -exec cp {} | mkdir newDirectory \;

Antwort1

Eine Möglichkeit besteht darin, den installBefehl anstelle von zu verwenden cp. Er bietet die Möglichkeit, alle führenden Verzeichnisse zu erstellen.

find source -name '*.z' -exec install -D {} dest \;

Antwort2

DuDaten können nicht weitergeleitet werdenauf mkdirdiese Weise. Sie könnten so etwas tun:

find source -name '*.z' -exec sh -c 'mkdir -p newDirectory && cp "$@" newDirectory' _ {} +

oder (vorausgesetzt, die Dateinamen enthalten keine Zeilenumbrüche)

find source -name '*.z' | while IFS= read -r foo; do 
   mkdir -p newDirectory;
   cp "$foo" newDirectory;
done 

oder wenn Sie nur ein Verzeichnis anlegen möchten, sodass der Name immer derselbe ist:

mkdir newDirectory; find source -name '*.z' -exec cp {} newDirectory \;

verwandte Informationen