Comment puis-je déplacer tous les fichiers sauf un? Je recherche quelque chose comme:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
où je déplace de vieux trucs vers un nouveau dossier sauf Tux.png
. ! -sign représente une négation. Existe-t-il un outil pour le travail?
Mettez ce qui suit dans votre .bashrc
Il étend les expressions rationnelles. Vous pouvez ensuite déplacer tous les fichiers sauf un par
Exceptions par rapport aux autres commandes
Notez que, dans la copie de répertoires, le forward-flash ne peut pas être utilisé dans le nom comme remarqué dans le thread Pourquoi extglob sauf rupture sauf condition? :
c'est
Backups.backupdb/
faux ici avant la négation et je ne l'utiliserais pas non plus pour déplacer des répertoires à cause du risque d'utiliser à tort des globs avec d'autres commandes et d'autres exceptions possibles.la source
mv !(arc*) archive_190629b
J'irais avec la méthode traditionnelle find & xargs:
-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 l'
-t
option mv est probablement une extension GNU. Pour les systèmes qui ne l'ont pasla source
Un moyen rapide serait de modifier le nom du fichier tux afin que votre commande de déplacement ne corresponde pas.
Par exemple:
la source
Je pense que le moyen le plus simple est de faire des backticks
Éditer:
Utilisez plutôt une barre oblique inverse avec ls pour éviter de l'utiliser avec un alias, c'est-à-dire que la plupart du temps, ls est aliasé comme ls --color.
Merci @Arnold Roa
la source
grep -v
?Pour bash, la réponse est correcte. Voici la syntaxe zsh (mon shell de choix):
Nécessite que l'
EXTENDED_GLOB
option shell soit définie.la source
Je trouve que c'est un peu plus sûr et plus facile à utiliser pour les mouvements simples qui excluent certains fichiers ou répertoires.
la source
-l
option dels
inclura beaucoup d'informations non pertinentes sur la ligne de commande et entraînera l'échec de la commande mv.Ce qui suit n'est pas une méthode garantie à 100% et ne doit pas du tout être tenté pour le script. Mais parfois, c'est assez bon pour une utilisation rapide du shell interactif. Un fichier global comme
(qui correspondra à tous les fichiers dont le nom commence par a, b ou c) peut être annulé en insérant d'abord un caractère "^", c'est-à-dire
J'utilise parfois ceci pour ne pas correspondre au répertoire "lost + found", comme par exemple:
Bien sûr, s'il y a d'autres fichiers commençant par l, je dois les traiter par la suite.
la source
La commande find répertorie tous les fichiers normaux et la commande fgrep filtre tout Tux.png. Les backticks indiquent à mv de déplacer la liste de fichiers résultante.
la source
Que diriez-vous de tout déplacer dans le dossier et de simplement déplacer Tux.png en arrière?
Je ne peux penser à aucune syntaxe shell pour dire "tout sauf ..." à la légère.
la source
la source
ls ~/Linux/Old/ | grep -v Tux.png | xargs -I{} mv {} ~/Linux/New/
fonctionne à la place.Que diriez-vous:
Vous devez cependant être dans le dossier.
la source
On peut ignorer grep comme ceci:
la source
Cela pourrait être plus simple et facile à retenir et cela fonctionne pour moi.
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination
la source