2017-10-10 15 views
0

Salut, j'apprends unix et je veux lancer un echo .??* qui montre tous mes fichiers commençant par . mais qui ne montre pas . ou ...utilise echo. ?? * et affiche tous les fichiers cachés, mais pas. ou .. eux-mêmes

Je veux dire que la commande fonctionne bien mais ne montre pas les fichiers .a.b.c.

Si les fichiers sont

. .. .a .b .c .aa .bb .cc .aaa .abc a b c aaa bbb ccc 

la sortie de l'écho doit être

.a .b .c .aa .bb .cc .aaa .abc 

Comment puis-je terminer la commande?

+0

Est-ce que 'echo. *' Fait ce que vous voulez? – Blorgbeard

+0

@Blorgbeard n ° – melpomene

+0

non, écho. * Montre. .. – OsmaK

Répondre

0

Cela dépend du shell que vous utilisez, mais bash vous pouvez faire ce qui suit (en supposant extglob est activé: shopt -s extglob):

echo [email protected](.?|[!.])* 

@(...|...) est un modèle "ou". Cela correspond à tous les fichiers correspondant à ..?* ou .[!.]*. Correspond aux fichiers commençant par .., suivi d'au moins un autre caractère.

..?* Cela trouve tous les noms qui commencent par .. à l'exception de .. lui-même. Correspond aux fichiers commençant par ., suivi d'un caractère non .. Cela correspond à tous les fichiers cachés "normaux" (dont le second caractère n'est pas un point).

Notez que dans votre exemple aucun des fichiers ne commence par .., donc .[!.]* serait suffisant pour produire la sortie désirée.