An der Linux-Befehlszeile möchte ich einen (sehr großen) Satz von .txt
Dateien von einem Verzeichnis (und seinen Unterverzeichnissen) in ein anderes kopieren .
Ich brauche die Verzeichnisstruktur, um intakt zu bleiben, und ich muss Dateien mit Ausnahme derjenigen, die auf enden, ignorieren .txt
.
Antworten:
Hierfür können Sie find und cpio verwenden
quelle
quelle
.
Nachherfind
. Auch auf macOS 10.13.1, dies gearbeitet:find . -type f -name "*.txt" -exec install -v {} /dest/path/{} \;
Ein anderer Ansatz
find . -name '*.txt' -exec rsync -R {} path/to/dext \;
quelle
find . -iname '*.txt' -exec rsync -Rptgon {} path/to/dext \;
habe ich eine Übereinstimmung durchgeführt, bei der die Groß- und Kleinschreibung nicht berücksichtigt wurde, und die Eigentumsrechte und Berechtigungen beibehalten.Der einfachste Weg, der bei mir funktioniert hat:
Ein Haken ist, dass Sie zu dem "gewünschten" Verzeichnis navigieren müssen, bevor der "übergeordnete Pfad" korrekt ist.
Stellen Sie außerdem sicher, dass Sie rekursive Globs in bash aktiviert haben:
quelle
Wie wäre es, wenn du es zuerst mit kopierst?
dann gehe in den neuen Ordner und starte
oder nur
Edit: ok du willst einen befehl der filtert (ich habe das nicht getestet weil mein system den
cpio
befehl nicht hat !). Hier habe ich es gefunden: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-FilesBitte testen Sie dies zuerst, da ich es noch nicht ausprobiert habe. Wenn jemand das überprüfen würde, wäre das großartig.
quelle
0
in-pmd0
und fügen Sie-print0
am Ende desfind
Befehls (kurz vor dem|
).Ich habe versucht, dasselbe unter macOS zu tun, aber keine der Optionen hat wirklich für mich funktioniert. Bis ich entdeckt habe
ditto
.Ich musste viele .wav-Dateien kopieren und sie überspringen lassen.
find . -type f -iname "*.wav" -ls -exec ditto {} /destination/folder/{} \;
find .
- Läuft im aktuellen Ordner zu finden. Stellen Sie sicher,cd /source/folder
bevor Sie beginnen-type f
- Legt fest, dass nur nach Dateien gesucht wird-iname "*.wav"
- Dies weist es an, nach Groß- und Kleinschreibung zu suchen * .wav-ls
- Hier sehen Sie die Datei, an der gearbeitet wird. Sonst zeigt es nichts.-exec ditto {} /destination/folder/{} \;
- Kopiert und erstellt alle Dateien mit demselben Verzeichnisbaum.quelle
Zum Verzeichnis navigieren:
Es ist ein bisschen direkter und mächtiger, wenn Sie reguläre Ausdrücke verwalten.
quelle
Zum Verzeichnis navigieren:
Sie müssen zu jedem Ordner im Verzeichnis navigieren, aber dies ist besser als die meisten Optionen, die ich bisher gesehen habe.
quelle