Ich habe ein Verzeichnis mit vielen Dateien und Verzeichnissen. Um es aufzuräumen, werde ich all diese Dateien in ein Verzeichnis legen, also würde ich so etwas tun:
$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory
Aber das wird natürlich nicht funktionieren , weil dann wird es versuchen , sich zu bewegen new_directory
in new_directory
. Gibt es eine einfache Möglichkeit, in einer Zeile das zu tun, was ich will, ohne dass ich alle Dateien und Verzeichnisse in diesem Verzeichnis kopieren und einfügen muss?
Antworten:
Ihre
Befehl wird tatsächlich funktionieren; Es wird nur eine Warnung ausgegeben, dass das Verzeichnis nicht in sich selbst verschoben werden kann.quelle
git mv
Sie das-k
Flag verwenden, da git standardmäßig fehlschlägt und nicht nur eine Warnung ausspuckt. Also musst du tungit mv -k * ./new_dir
.Ein schneller und schmutziger Oneliner.
quelle
Wenn Sie nur nach den Dateien suchen (dh nicht nach Verzeichnissen), dann
ist die tragbarste Lösung. Aus Geschwindigkeitsgründen sollten Sie find und xargs mit -print0 und -0 verschieben, aber nur, wenn Sie GNU find und xargs haben.
quelle
find
- obwohl ich auf jeden Fall auf Systemen war, die keine haben, leider :(In den Zeiten, in denen ich dieses Problem hatte, habe ich eine der folgenden Aktionen ausgeführt:
oder
Die zweite Form nutzt den Platzhalter aus, der Dateinamen überspringt, die mit '.' Beginnen.
quelle
wie wäre es mit:
IOW, verschiebe den Inhalt nicht in ein neues Verzeichnis, sondern lege dieses Verzeichnis in ein neues.
quelle
In ähnlicher Weise wie bei @ Rembrane (allerdings kein Einzeiler ):
Dies sollte zu 100% portabel sein - auch wenn
find
es auf Ihrem System leider nicht vorhanden ist.quelle
Meine Vorschläge: Wie von anderen angegeben
Wird funktionieren, finde IFF die Gesamtexpansion ist kurz genug.
Andernfalls können Sie dieses Programm ausprobieren, das sich auf eine viel größere Anzahl von Dateien skalieren lässt:
Erläuterung
quelle
-print0
und versucht-0
und es bricht immer noch.Verwenden:
Von der
xargs
Manpage:quelle
So vermeiden Sie die Fehlermeldung und halten Sie sie einfach:
wird das Gleiche tun, aber die Fehlermeldung vermeiden (es sei denn, Sie haben Punkte in Ihren Ordnernamen, denke ich).
quelle