Wie verschiebe ich alle Verzeichnisse effizient in ein einziges Verzeichnis im selben Ordner?

Wie verschiebe ich alle Verzeichnisse effizient in ein einziges Verzeichnis im selben Ordner?

Ich habe 100 Dateien in einem einzigen Ordner, darunter einen Ordner namens „Ziel“. Ich möchte alle Dateien in diesem Ordner in den Zielordner migrieren (außer dem Zielordner selbst).

Gibt es hierfür einen effizienten Terminalbefehl?

Antwort1

Wenn sich in Ihrem Verzeichnis nur die Dateien (und das Verzeichnisziel) befinden, verwenden Sie einfach mv, statt find:

mv * target

Es wird bemängelt, dass „Ziel“ nicht auf sich selbst verschoben werden kann, aber danach werden alle Dateien im Ziel sein.

Antwort2

Benutze das

$ mv target ..
$ mv * ../target
$ mv ../target .

Antwort3

Das hier funktioniert auch:

find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;

Einer der Hauptvorteile, wenn Sie findsich nicht auf die Bash-Vervollständigung verlassen, besteht darin, dass Sie gleichzeitig die versteckten Dateien erhalten. mv * ...Das wird nicht passieren.

Sie könnten vielleicht etwas wie Folgendes wählen:

mv -t target * .[^.]*

Oder Sie können, wie James anmerkt, den Find-Befehl so einschränken, dass nur Dateien angezeigt werden. Und wie LoremIpsum anmerkte, xargswäre es, wenn es Milliarden davon gibt, etwas effizienter:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target

Antwort4

Der Ansatz, das Zielverzeichnis in ein vorheriges zu verschieben, dann alles dorthin zu verschieben und es schließlich wieder in das aktuelle Verzeichnis zurückzuverschieben, ist in Ordnung. Das einzige Problem ist, dass es für ein Git-Projektverzeichnis, in dem wir den Verlauf speichern müssen, nicht funktioniert.

Für ein Git-Verzeichnis gehen Sie also einfach wie folgt vor:git mv * Ziel -k

Der-kOption wird verwendet, um Verschiebe-/Umbenennungsfehler zu überspringen

verwandte Informationen