Je comprends ce quest extension daccolades , mais je ne sais pas comment faire utilisez-le.
Quand lutilisez-vous?
Veuillez mapprendre quelques exemples pratiques et remarquables si vous avez votre propre astuce.
Réponse
Lextension daccolades est très utile si vous avez des noms de chemin longs. Je lutilise comme un moyen rapide de sauvegarder un fichier :
cp /a/really/long/path/to/some/file.txt{,.bak}
copiera /a/really/long/path/to/some/file.txt
vers /a/really/long/path/to/some/file.txt.bak
Vous pouvez également lutiliser dans une séquence . Je lai déjà fait pour télécharger de nombreuses pages à partir du Web:
wget http://domain.com/book/page{1..5}.html
ou
for i in {1..100} do #do something 100 times done
Commentaires
Réponse
Expansion des accolades est très pratique lors de la création de grandes structures de répertoires:
mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}
Cela vous donnera
find dir1 -type d dir1 dir1/subdir1 dir1/subdir1/subsubdir1 dir1/subdir1/subsubdir2 dir1/subdir2 dir1/subdir2/subsubdir1 dir1/subdir2/subsubdir2
Vous pouvez même aller plus loin et mettre le développement daccolades dans lexpansion daccolades:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
Cela vous donnera la même structure de répertoires que lexemple ci-dessus.
Commentaires
- Limbrication est bien, mais votre exemple dimbrication (
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) ne ‘ ne sert aucun but. Vous auriez pu simplement faire ceci:mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
. - @iconoclast, cela sert un but si vous interprétez
subdir1
etsubdir2
au sens non littéral. Remplacezsubdir1
parcat
etsubdir2
pardog
par exemple. - @ephsmith: si vous interprétez » subdir1 » comme représentant » cat » et » subdir2 » pour » dog « , alors lexemple dimbrication échoue, car il utilise le sous-répertoire {1,2}, et il ny a pas de chaîne que vous pouvez remplacer » subdir » avec cela rendra subdir {1,2} return {cat, dog}.
Réponse
Je lutilise lorsque je souhaite réduire la saisie:
geany /path/to/file1 /path/to/file2 # versus geany /path/to/file{1,2}
Un autre exemple:
wajig install libpam0g-dev libiw-dev libdb-dev # versus wajig install lib{pam0g,iw,db}-dev
Answer
Je lutilise pour comparer les sortie de test vers la sortie de test souhaitée pendant le développement Si le test n ° 41 échoue, il est facile de voir quelle est la différence entre la sortie du test (dans le fichier tests.output / 041) et la sortie souhaitée (dans le fichier tests.out / 041):
$ diff tests.{out,output}/041
Réponse
Voici quelques cas fréquents pour moi:
Pour renommer:
mv myText.{txt,tex}
ou
mv myText.tex{,.old}
ou
cp myText.tex{,.backup}
(Bien quil « soit moins compliqué dutiliser le contrôle de version pour les 2 dernières tâches.)
Pour comparer (déjà mentionné):
diff path{1,2}/a.txt
Réponse
Il y a plusieurs bonnes réponses ici, mais aucune delles ne mentionne quand pas pour utiliser lexpansion entre accolades. Comme les autres répondeurs, jutilise un peu lextension daccolades sur la ligne de commande. Je lutilise également dans mes alias et mes fonctions car je peux mattendre à un shell intelligent.
Je ne lutilise pas dans mes scripts shell (sauf sil y a une autre raison pour laquelle les scripts devrait être bash ou zsh, mais dans ces cas, il est préférable de passer à un langage de script « réel » comme perl
ou python
). Lexpansion des accolades nest pas portable car elle ne lest pas le standard de shell POSIX. Même si cela fonctionne dans vos scripts shell /bin/sh
– shebang ed, il ne fonctionnera pas sur les systèmes avec plus de /bin/sh
shells (par exemple dash
).
Dans le cas dune différence dun seul chiffre, vous navez pas besoin de développement daccolades; une classe de caractères suffira:
Bashism:
diff file{1,2}
Portable:
diff file[12]
Commentaires
- Une différence est que
file{1,2}
sétendra toujours àfile1 file2
, tandis quefile[12]
sétendra uniquement aux noms de fichiers existants: ie sifile1
existe maisfile2
ne ‘ t,file[12]
se développe enfile1
uniquement. Lextension[]
est en réalité une version restreinte de?
expansion (et ils sont appelés » extensions de chemin daccès « ). - Correct, lexpansion daccolades nest pas shell globbing (aka extension du chemin). Cest ‘ une bonne légende qui na
t vraiment été mentionné encore: lexpansion daccolades est meilleure pour remarquer les chemins absents de manière inattendue. Vous pouvez également insérer une extension entre accolades.
Réponse
Après avoir divisé un très gros fichier avec
split -b 100m hugeFile.zip part.
supposons quil soit divisé en 262 morceaux, en dautres termes part.aa
, part.ab
, part.ac
… part.kb
Vous pouvez à nouveau joindre ces pièces en imbriquant extensions daccolades , comme ceci
cat part.{{a..j}{a..z},k{a..b}} > hugeFile.zip
program -f file1 -f file2 -f file3
, vous pouvez faireprogram "-f file"{1..3}
program
obtient trois mots:"-f file1" "-f file2" "-f file3"
, au lieu de 6:"-f" "file1" "-f" "file2" "-f" "file3"
.for
est un peu inutile, car vous pouvez écrirefor ((i=1; i<=100; i++))
et cest plus efficace.