Un moyen rapide serait de modifier le nom du fichier tux afin que votre commande de déplacement ne corresponde pas.
Par exemple :
mv Tux.png .Tux.png
mv * ~/somefolder
mv .Tux.png Tux.png
Mettez ce qui suit dans votre .bashrc
shopt -s extglob
Il étend les regexes. Vous pouvez ensuite déplacer tous les fichiers sauf un en
mv !(fileOne) ~/path/newFolder
Exceptions par rapport aux autres commandes
Notez que, lors de la copie de répertoires, le forward-flash ne peut pas être utilisé dans le nom comme indiqué dans le fil Why extglob except breaking except condition ? :
cp -r !(Backups.backupdb) /home/masi/Documents/
donc Backups.backupdb/
est faux ici avant la négation et je ne l'utiliserais pas non plus dans les répertoires mobiles à cause du risque d'utiliser à tort alors globs avec d'autres commandes et d'éventuelles autres exceptions.
Si vous utilisez bash et que vous avez le extglob
jeu d'options shell (ce qui est généralement le cas) :
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
J'irais avec la méthode traditionnelle find &xargs :
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 |
xargs -0 mv -t ~/Linux/New
-maxdepth 1
fait qu'il ne recherche pas de manière récursive. Si vous ne vous souciez que des fichiers, vous pouvez dire -type f
. -mindepth 1
fait qu'il n'inclut pas le ~/Linux/Old
chemin lui-même dans le résultat. Fonctionne avec tous les noms de fichiers, y compris ceux qui contiennent des retours à la ligne intégrés.
Un commentaire note que le mv -t
option est probablement une extension GNU. Pour les systèmes qui ne l'ont pas
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
-exec mv '{}' ~/Linux/New \;