Rekursiv verschieben Sie die Dateien der bestimmten Art und halten Sie Ihre Verzeichnis-Struktur
Ich habe ein Verzeichnis mit mehreren Unterverzeichnissen mit mov und jpg - Dateien.
/dir/
/subdir-a/ # contains a-1.jpg, a-2.jpg, a-1.mov
/subdir-b/ # contains b-1.mov
/subdir-c/ # contains c-1.jpg
/subdir-d/ # contains d-1.mov
... # more directories with the same pattern
Muss ich einen Weg finden, mit Befehlszeilen-tools (Mac OS x, die im Idealfall) zu bewegen alle mov Dateien an einem neuen Speicherort. Allerdings, eine Voraussetzung ist, um zu halten, Verzeichnis-Struktur, d.h.:
/dir/
/subdir-a/ # contains a-1.mov
/subdir-b/ # contains b-1.mov
# NOTE: subdir-c isn't copied because it doesn't have mov files
/subdir-d/ # contains d-1.mov
...
Ich bin vertraut mit ,
grep
und xargs
war sich aber nicht sicher, wie Sie um dieses Problem zu lösen. Vielen Dank im Voraus!
Sie könnte, wenn Sie den Platz haben,
cp
Verzeichnis und nur find newdir ! -name '*.mov' -delete
. Es ḿay nicht die beste Lösung, aber als eine praktische Sache ist es wahrscheinlich, um zu beenden, bevor Sie bekommen eine bessere Antwort hier.InformationsquelleAutor moey | 2012-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Er richtet sich leicht auf Ihre O/S und, mehr insbesondere, auf die Einrichtungen in Ihrer version von
tar
ist und ob man den Befehlcpio
. Es hängt auch ein bisschen auf, ob Sie Zeilenumbrüche (insbesondere) in Ihrer Datei-Namen; die meisten Menschen nicht.Option #1
Option #2
Den
cpio
Befehl hat eine pass-through - (kopieren) - Modus, die genau das macht, was Sie wollen, gegeben eine Liste von Datei-Namen, je eines pro Zeile, auf seine standard-Eingabe.Einige Versionen der
tar
Befehl über eine option verfügen, Lesen Sie die Liste von Dateinamen, einer pro Zeile, von der standard-Eingabe; auf MacOS X, diese option ist-T -
(wo der einsame-
bedeutet "standard input"). Für die erstentar
Befehl, die option-f -
bedeutet (im Kontext des Schreibens ein Archiv mit-c
schreiben Sie auf der standard-Ausgabe); in der zweitentar
Befehl, die-x
option bedeutet, dass die-f -
bedeutet "read from standard input".Kann es andere Optionen, schauen Sie auf der manual-Seite oder Hilfe-Ausgabe von
tar
eher vorsichtig.Diesem Prozess werden die Dateien kopiert, anstatt zu verschieben. Die zweite Hälfte des Betriebs wäre:
-delete
Möglichkeitfind
statt-exec rm
?Könnten Sie
-print0
/-0
zu kümmern und das newline-problem, und Sie sollten-delete
stattrm -f
.Ja, können Sie wahrscheinlich verwenden Sie
-delete
wenn Ihr die Variante desfind
unterstützt. War es nicht eine option in der 7. Ausgabe von UNIX (und eigentlich immer noch eine option nicht in POSIX 2008). Ich Neige dazu, zu vergessen, über die nicht-standard-Optionen, so dass, was ich Schreibe, hat eine maximale chance von arbeiten auf vielen Systemen. Ähnlich ist es mit der-print0 / -0
Optionen; ich bin mir nicht sicher, obtar
odercpio
unterstützt; insbesondere wedercpio
nochtar
auf MacOS X 10.7.2 unterstützt. Das ist der Grund, warum ich die "keine newlines im Dateinamen" caveat in der Antwort. Alles andere ist in Ordnung.Auch +1! Vielen Dank für die ausführliche Erklärung, @JonathanLeffler; es könnte nicht besser sein. 🙂
Ich glaube nicht, dass Sie schon richtig geliebt, für diese Antwort (besonders die cpio-Teil). Es gibt buchstäblich 30 oder 40 anderen stackexchange Antworten, die saugen im Vergleich zu dieser | und zeigen, bis auf Google, bevor diese ein. Schande über Sie SEO-Kriterien! Tolle Antwort +1.
InformationsquelleAutor
Großen Dateien, wenn Sie auf dem gleichen Dateisystem, die Sie nicht wollen, um Sie zu kopieren, aber nur, replizieren Sie Ihre Verzeichnis-Struktur während der Bewegung.
Mit dieser Funktion können Sie:
Oder, hinzufügen der Unterstützung, um das Zusammenführen vorhandener Verzeichnisse:
move_keep_path /path/to/files/*.txt /dest
InformationsquelleAutor
vom übergeordneten Verzeichnis "dir dies auszuführen:
Dann auf cd zu dem Verzeichnis, das Sie wollen, um die Dateien zu verschieben und diese ausführen:
InformationsquelleAutor
BEHAUPTEN: Keine Dateien newline-Zeichen in Ihnen. Räumen, jedoch sind die AOK.
InformationsquelleAutor
Dieser sollte funktionieren, wenn Sie verschieben möchten alle
mov
Dateien zu einem Verzeichnis namens " neuer Standort -Jedoch, wenn Sie möchten, bewegen Sie den
mov
- Dateien zusammen mit Ihren sub-dirs dann können Sie so etwas tun -Schritt 1: Kopieren Sie die gesamte Struktur von /dir, um eine neue Position mit
cp
Schritt 2: Finden Sie
jpg
Dateien aus neuverz und löschen Sie Sie.- Test:
/newlocation/dir/path/under/olddir/file.mov
(statt/newlocation/path/under/olddir/file.mov
); Sie müssen zu Beginn derfind
- Befehl in das Verzeichnis auf oberster Ebene, von denen Sie wollen, um Dateien zu verschieben.Danke Jon, ich habe paar tests, hat nicht wirklich irgendeinen Unterschied bemerken. Ist es, weil das Beispiel, das ich benutze?
Der erste Befehl, den ich verwiesen wurde war die
find
Befehl, nicht die verschiedenencp
Befehle.Tut mir Leid mein schlechtes Jon. Ich habe einen test mit der
find
Befehl. Es verschiebt die Dateien in neues Verzeichnis. Es bewegt sich nicht, der sub-dir, wie ich erklärt habe in die Antwort.Urgh...ja, ich habe es falsch zu. Meine erste Bemerkung ist falsch (ich dachte, was passiert, wenn Namen gestreamt werden, um
cpio
, denke ich). Also, es war ein problem; es war einfach nicht das, was ich diagnostiziert das problem. Meine (halb -) bad.InformationsquelleAutor