10
votes

Bash Globbing - Autoexpand pour quelques cas spécifiques?

Je comprends que le Wildcard * (par lui-même) se développera de manière à ce que cela signifie "tous les fichiers non cachés dans le dossier actuel" avec des fichiers cachés étant ceux préfixés par une période.

Il y a deux cas d'utilisation que je pense être utiles, mais je ne sais pas comment faire correctement:

  1. Comment pouvez-vous Glob pour ... "Tous les fichiers du dossier actuel, y compris les fichiers cachés, mais non compris . ou .. " / p>

  2. Comment Glob pour ... "Tous les fichiers cachés (et uniquement les fichiers cachés) dans le dossier actuel, mais non compris . ou .. .. "?


0 commentaires

6 Réponses :


3
votes

Le Bash Cookbook suggère une solution à votre 2e exigence.

.[!.]*


1 commentaires

touchez ..bla; echo {.,} [!.] * | grep bla échoue.



15
votes

pour développer sur Réponse des paves et répondez à la deuxième partie de votre question, tous les fichiers, sauf . et .. pourrait être spécifié comme ceci: xxx

en fonction de votre Cas d'utilisation exacte Il peut être préférable de définir l'option dotglob shell, de sorte que Bash inclut des dotfiles dans des extensions de * par défaut: xxx


2 commentaires

{..? * ,. [^.] *, [^.] *} fonctionne indépendamment de dotglob réglage et évite les noms de fichiers manquants en commençant par deux points, que tout le monde ici semble avoir manqué.


@Ephement: Cela me donne un match parasite .. * quand il n'y a pas de noms de fichiers commençant par deux points.



1
votes

Pour répondre à votre premier cas:

echo {.*,}[^.]*


1 commentaires

touchez ..bla; echo {.,} [^.] * | grep bla échoue.



0
votes

Par "Tous les fichiers" et "Tous les fichiers cachés" voulez-vous dire uniquement des fichiers - uniquement ou voulez-vous dire des fichiers et des répertoires? Globbing fonctionne sur des noms indépendamment d'un fichier ou d'un répertoire. Les autres personnes donnent de bonnes réponses pour utiliser Globbing pour trouver des noms masqués VS non cachés, mais vous voudrez peut-être passer à la commande code> code> comme une alternative plus facile pouvant distinguer les types.

à Recherchez "Tous les fichiers du dossier actuel, y compris des fichiers cachés, mais non compris. ou ..": p> xxx pré>

pour trouver "Tous les fichiers et répertoires du dossier actuel, y compris Fichiers cachés, mais non compris. ou .. ": p> xxx pré>

pour trouver" tous les fichiers cachés (et uniquement les fichiers cachés) dans le dossier actuel, mais non compris. Ou. . ": p> xxx pré>

pour trouver" tous les fichiers et répertoires cachés (et uniquement des fichiers et des répertoires cachés) dans le dossier actuel, mais non compris. ":": P>

find . -maxdepth 1 -type f


0 commentaires

1
votes

Combinaison de réponses STH et PAVIUM

# dot files but avoiding . and ..
.[!.]*

# all files but avoiding . and .. 
{.[!.]*,*}


0 commentaires

0
votes

Donc, même si cela est vieux - sans utiliser Shopt, cela ne semble pas avoir été répondu complètement. Mais, en développant ce qui a été donné comme des réponses jusqu'à présent, ces travaux pour moi:

1:

{* ,. [!.] *, ..? *}

2:

{. [!.] *, ..? *}


0 commentaires