Verschieben von Dateien und Ordnern in einen Unterordner

Verschieben von Dateien und Ordnern in einen Unterordner

Ich möchte alle Dateien und Ordner aus einem Verzeichnis in einen seiner Unterordner verschieben. Wie mache ich das?

Ich verwende BusyBox und Linux.

ex:

Verschiebe alle Dateien und Ordner /my/path/nach/my/path/subfolder/.

Lösungen zum Kopieren und anschließenden Löschen sind nicht erschwinglich.

Danke.

Antwort1

mv * subfolder 

Natürlich wird es fehlschlagen, das Verzeichnis "Unterordner" in sich selbst zu verschieben, aber alles andere wird verschoben

Antwort2

Lösungen, die *(erweitert durch Shell) verwenden, funktionieren nicht mit zu vielen Objekten in /my/path/. In diesem Fall erhalten Sie:

argument list too long

Bei diesem Ansatz wird Folgendes nicht verwendet *:

cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +

Leider sind -mindepthund -maxdepthOptionen von findnicht POSIX-kompatibel; ich glaube, keine -tder Optionen von ist das.mv

Diese Variante sollte POSIX genügen:

cd /my/path/ &&
find . ! -name . -prune ! -name subfolder -exec mv {} subfolder/ \;

(Ich habe mich angepasstdiese Unix- und Linux SE-Antwort). Leider ruft es mvjedes gefundene Objekt auf und ist daher langsam.


Schnelle alternative Vorgehensweise, sofern man Verzeichnisse neu anlegen kann (sollten zunächst weder /my/path/subfolder/noch /my/subfolder/existieren):

  • umbenennen path/in subfolder/,
  • neu erstellen path/,
  • verschieben subfolder/in path/.

Hinweis: Bei Inode-basierten Dateisystemen sollte dies gleich schnell sein, unabhängig davon, wie viele Objekte sich darin befinden path/. Der Code:

cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/

In diesem Fall habe ich &&viel Wert darauf gelegt, dass das Verfahren abgebrochen werden sollte, wenn einer seiner Schritte fehlschlägt. Dieser Ansatz ist jedoch unpraktisch, wenn Sie nicht standardmäßige Berechtigungen, Besitzverhältnisse usw. benötigen path/oder haben möchten.subfolder/

Antwort3

Der einfachste Weg, dies zu tun, ist:

mv !(subfolder) subfolder

„!“ bedeutet NICHT, ähnlich wie bei Programmiersprachen, wo mv alle Dateien und Ordner mit Ausnahme des Unterordners in den erforderlichen Unterordner verschiebt.

Weitere Dinge wie das Verschieben von versteckten Ordnern und Punktordnern werden hier beschrieben:https://askubuntu.com/questions/91740/wie-verschiebe-ich-alle-dateien-im-aktuellen-ordner-in-einen-unterordner

Antwort4

Vielleicht möchten Sie den Befehl ausprobieren mv. Sie können versuchen, nach allen Dateien und Ordnern in einem Verzeichnis zu suchen und ein Unterverzeichnis auszuschließen. Dann kopieren Sie alle gefundenen Dateien findmit dem mvBefehl in dieses Unterverzeichnis.

Eine ähnliche Frage zu Stack-Overflow anzeigenhttps://stackoverflow.com/questions/4612157/wie-man-den-mv-command-verwendet-um-dateien-außer-diesen-in-einem-spezifischen-verzeichnis-zu-verschieben

verwandte Informationen