[BASH] Exclure un fichier ou dossier
Résolu
Yoan
Messages postés
11905
Statut
Modérateur
-
josephtux -
josephtux -
Bonjour,
Assez régulièrement, quand je passe des noms de fichiers ou dossiers à des commandes, j'aimerais passer comme argument "tous les fichiers, sauf un". Par exemple pour copier avec "cp" tous les fichiers d'un dossier sauf un que je spécifie manuellement.
A partir du moment où j'utilise l'étoile pour indiquer à Bash qu'il faut passer tous les fichiers et dossiers en paramètre, est-il possible d'en exclure ?
Merci
Assez régulièrement, quand je passe des noms de fichiers ou dossiers à des commandes, j'aimerais passer comme argument "tous les fichiers, sauf un". Par exemple pour copier avec "cp" tous les fichiers d'un dossier sauf un que je spécifie manuellement.
A partir du moment où j'utilise l'étoile pour indiquer à Bash qu'il faut passer tous les fichiers et dossiers en paramètre, est-il possible d'en exclure ?
Merci
A voir également:
- [BASH] Exclure un fichier ou dossier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Dossier appdata - Guide
6 réponses
il existe une solution très simple :
Man de bash :
donc d'abord taper
Man de bash :
If the extglob shell option is enabled using the shopt builtin, several
extended pattern matching operators are recognized. In the following
description, a pattern-list is a list of one or more patterns separated
by a |. Composite patterns may be formed using one or more of the fol?
lowing sub-patterns:
?(pattern-list)
Matches zero or one occurrence of the given patterns
*(pattern-list)
Matches zero or more occurrences of the given patterns
+(pattern-list)
Matches one or more occurrences of the given patterns
@(pattern-list)
Matches one of the given patterns
!(pattern-list)
Matches anything except one of the given patterns
donc d'abord taper
shopt -s extglobpour activer ensuite on peut écrire :
cp !(*.txt) /media/sauvegardequi copiera tout sauf les fichiers .txt
Directement avec la commande cp en une seule passe sans script, je ne vois pas mais par contre rsync le permet avec l'option --exclude.
Rsync est, du reste, très utile pour la copie, synchroniqation ou mirroring.
Rsync est, du reste, très utile pour la copie, synchroniqation ou mirroring.
Salut Yoan,
Oui c'est clair que directement depuis la commande "cp" c'est râpé ;-((
Après sans "rsync", il te faudra passer par des moulinettes avec soit la commande "find" et son option "-prune", soit via des pipes avec "grep -v" couplé à "xargs"...
Oui c'est clair que directement depuis la commande "cp" c'est râpé ;-((
Après sans "rsync", il te faudra passer par des moulinettes avec soit la commande "find" et son option "-prune", soit via des pipes avec "grep -v" couplé à "xargs"...
Mais c'est pas spécialement pour copier, je voudrais pouvoir exclure des fichiers à * dans le cas général :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
on peut utiliser les Motifs génériques
genre pour lister les fichiers (y compris les répertoires) du répertoire courant qui ne commence pas par q ou Q
genre pour lister les fichiers (y compris les répertoires) du répertoire courant qui ne commence pas par q ou Q
printf '%s\n' !([qQ]*)