Puis-je garder. et .. sur. * expansion?

10

Je trouve souvent ça ennuyeux (ou pire) quand je tape

command .*

dans bash et la commande s'applique au répertoire parent et au répertoire courant. Existe-t-il une option de shell ou une autre configuration que je peux modifier pour faire en sorte que bash exclue .et ..de l'expansion de .*?

David Z
la source

Réponses:

13

En bash, dans cet ordre:

GLOBIGNORE=.
shopt -u dotglob

Lorsque GLOBIGNORE est défini,. et .. sont automatiquement ignorés, vous n'avez donc pas besoin de les définir dans GLOBIGNORE, mais si vous n'avez rien d'autre à ignorer, vous n'aurez rien à régler.

Chaque fois que vous définissez GLOBIGNORE sur une valeur non nulle, bash active l'option dotglob, vous devrez donc la désactiver par la suite; sinon bash se développera *pour inclure les fichiers commençant par un point.

camh
la source
Cool merci! En fait, j'aurais préféré l' dotgloballumer, donc le réglage des GLOBIGNOREsons est parfait.
David Z
Lorsque GLOBIGNORE est défini, Bash ignore .et ..mais pas foo/.et foo/... Vous voudrez peut-être utiliser GLOBIGNORE=.:*/.:*/..pour que cela fonctionne également avec les noms de chemin.
user123444555621
3

Sur un système inconnu où j'ai trop peu de temps pour vérifier les paramètres utilisés (comme GLOBIGNORE), j'utilise le modèle infaillible suivant:

command .??*
  • Rapide à taper et garanti à exclure .et ..quel que soit l'environnement.
Alexander Shcheblikin
la source
1
J'ai toujours aimé cette approche, mais sachez qu'elle ne correspond pas aux fichiers 1 caractère.a
MestreLion