Quand utilisez-vous lexpansion daccolades?

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

  • Ceci peut également être utilisé pour la duplication darguments. Supposons que vous ayez un programme qui nécessite un ‘ -f ‘ argument pour chaque fichier sur lequel opérer. au lieu de faire program -f file1 -f file2 -f file3, vous pouvez faire program "-f file"{1..3}
  • Cest dommage. Je viens de le découvrir mais fais la sauvegarde sur des chemins extra-longs pendant des années sans connaître les rhis. Merci.
  • @Patrick: Cela échoue car program obtient trois mots: "-f file1" "-f file2" "-f file3", au lieu de 6: "-f" "file1" "-f" "file2" "-f" "file3".
  • @dogbane: Utiliser lexpansion pour une utilisation dans une boucle for est un peu inutile, car vous pouvez écrire for ((i=1; i<=100; i++)) et cest plus efficace.

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 et subdir2 au sens non littéral. Remplacez subdir1 par cat et subdir2 par dog 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 que file[12] sétendra uniquement aux noms de fichiers existants: ie si file1 existe mais file2 ne ‘ t, file[12] se développe en file1 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.acpart.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 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *