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 -mindepth
und -maxdepth
Optionen von find
nicht POSIX-kompatibel; ich glaube, keine -t
der 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 mv
jedes 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/
insubfolder/
, - neu erstellen
path/
, - verschieben
subfolder/
inpath/
.
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 find
mit dem mv
Befehl 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