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 find
sich 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, xargs
wä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