Wenn Sie alles außer Verzeichnissen von $SOURCE_DIR
nach verschieben möchten $TARGET_DIR
, können Sie diesen Befehl verwenden:
find "$SOURCE_DIR" -maxdepth 1 -not -type d -exec mv -t "$TARGET_DIR" -- '{}' +
Im Detail erklärt:
find
: Die Suche nach Dateien in einem Verzeichnis suchen
$SOURCE_DIR
: Das Verzeichnis, in dem gesucht werden soll
-maxdepth 1
: Schauen Sie nicht in Unterverzeichnisse
-not -type d
: Verzeichnisse ignorieren
- Sie können es auch verwenden,
-type f
wenn Sie nur Dinge kopieren möchten, bei denen es sich ausschließlich um Dateien handelt. Ich bevorzuge jedoch das Obige, da es auch alles abfängt, was weder eine Datei noch ein Verzeichnis ist (insbesondere symbolische Links).
-exec mv -t "$TARGET_DIR" -- '{}' +
: Führen Sie den Befehl aus, mv -t "$TARGET_DIR" -- FILES...
in dem FILES...
sich alle übereinstimmenden Dateien befinden (danke @DavidFoerster).
find ... -exec mv -t "$TARGET_DIR" -- '{}' +
wäre sicherer (falls$TARGET_DIR
kein Verzeichnis vorhanden ist oder die Übereinstimmung mit beginnt-
) und effizienter (da nicht für jede übereinstimmende Datei ein neuer Unterprozess erzeugt wird).Ich denke, Sie möchten nur Ihre Dateien mv. Gehen Sie zuerst in Ihr Verzeichnis und verwenden Sie diesen Befehl, ersetzen Sie $ TARGET durch Ihren Zielverzeichnispfad. Wenn Sie Ihre Dateien kopieren möchten, ersetzen Sie sie
mv
durchcp
.Wenn ich dies erkläre,
find . -type f
bedeutet dies, dass Sie alle Dateien auswählen und den Befehl für alle ausgewählten Elemente-exec mv {} $TARGET \;
ausführenmv
.Die vorherige Antwort hat einen Fehler. Es werden auch
mv
alle Dateien in Unterverzeichnissen angezeigt. Die schnelle Lösung ist Verwendung-maxdepth 1
. Dann werden keine rekursivenmv
Dateien in Unterverzeichnissen gespeichert. Unten ist die richtige ..quelle
-type f
verhindert keine Rekursion.Python-Ansatz
Wenn Sie rekursiv mit Dateien umgehen,
find
ist dies der richtige Weg. In diesem speziellen Fall ist es nicht notwendig, kann aber verwendet werden,-maxdepth 1
wie andere Antworten zeigen.Ein einfacher Python-Befehl kann dies ebenfalls tun. Hier ist ein Beispiel:
So funktioniert das:
fl=[f for f in os.listdir('.') if os.path.isfile(f)]
iteriert über alle gefundenen Elementeos.listdir('.')
und wir testen mithilfe deros.path.isfile()
Funktion, ob es sich bei dem Element um eine Datei handelt .Sobald die
fl
Dateiliste erstellt ist, verwenden wir diemap()
Funktion. Diese Funktion akzeptiert zwei Argumente - eine Funktion und eine Liste von Elementen. Es wird die Funktion ausführen, die wir für jede Datei in einer Liste angegeben haben. Wir haben hier alsolambda x:shutil.move(x,'./a_directory')
eine anonyme Funktion, die eine bestimmte Datei in ein bestimmtes Verzeichnis verschiebt, und dann haben wirfl
die Liste der Dateien, die wir erstellt haben.Aus Gründen der Lesbarkeit und allgemeinen Verwendung können wir dies auch als allgemeines Python-Skript umschreiben, das zwei Argumente verwendet - Quellverzeichnis und Ziel-Unterverzeichnis.
Und die Verwendung ist wie folgt:
quelle
Wenn Sie zsh anstelle von bash verwenden, können Sie Folgendes tun:
Das
(.)
am Ende wird als Glob-Qualifier bezeichnet. Das.
Innere bedeutet speziell, nur reguläre Dateien abzugleichen.Ein zu machen
mv *(.) "$target"
ist schnell und praktisch. Wenn Sie dies jedoch als Teil eines Skripts tun, sollten Sie stattdessen etwas schreiben, wie es Frxstrem und David Forester vorgeschlagen habenmv -t "$target" -- *(.)
, um Eckfälle besser zu behandeln, die bei der Verwendung durch andere Personen auftreten können.quelle
mv -t "$TARGET" -- "$SOURCE"/*(.)
wäre dies sicherer (falls"$TARGET"
mit-
einem Verzeichnis begonnen wird oder nicht). Ich mag die zsh-Lösung!So verschieben Sie in Python alles außer Verzeichnissen von
source-dir
Verzeichnis zudestination-dir
Verzeichnis:Siehe Ausführen der Python-Datei im Terminal .
quelle
import mypackage
vorfrom mypackage import ...
from __future__
Importe und gewöhnlichenfrom pathlib
Importe.import module
sollte der erste sein (from module import object
Ich würde verwenden
Dies funktioniert, solange Ihre Ordner keine Erweiterungen haben.
quelle