Ein schneller Weg wäre, den Tux-Dateinamen so zu ändern, dass Ihr Verschiebebefehl nicht übereinstimmt.
Zum Beispiel:
mv Tux.png .Tux.png
mv * ~/somefolder
mv .Tux.png Tux.png
Fügen Sie Folgendes in Ihre .bashrc
einshopt -s extglob
Es erweitert reguläre Ausdrücke. Sie können dann alle Dateien bis auf eine verschieben um
mv !(fileOne) ~/path/newFolder
Ausnahmen in Bezug auf andere Befehle
Beachten Sie, dass beim Kopieren von Verzeichnissen der Forward-Flash nicht im Namen verwendet werden kann, wie im Thread Why extglob außer breaking except condition?:
erwähntcp -r !(Backups.backupdb) /home/masi/Documents/
also Backups.backupdb/
steht hier vor der Negation falsch und ich würde es auch nicht beim Verschieben von Verzeichnissen verwenden, da die Gefahr besteht, dass Globs mit anderen Befehlen und möglichen anderen Ausnahmen falsch verwendet werden.
Wenn Sie Bash verwenden und den extglob
haben Shell-Optionssatz (was normalerweise der Fall ist):
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
Ich würde den traditionellen find &xargs-Weg wählen:
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 |
xargs -0 mv -t ~/Linux/New
-maxdepth 1
macht es nicht rekursiv suchen. Wenn Sie sich nur um Dateien kümmern, können Sie -type f
sagen . -mindepth 1
bewirkt, dass ~/Linux/Old
nicht enthalten ist Pfad selbst in das Ergebnis. Funktioniert mit beliebigen Dateinamen, auch mit solchen, die eingebettete Zeilenumbrüche enthalten.
Ein Kommentar stellt fest, dass die mv -t
Option ist wahrscheinlich eine GNU-Erweiterung. Für Systeme, die es nicht haben
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
-exec mv '{}' ~/Linux/New \;