J'ai un répertoire dans lequel de nombreux fichiers (environ 200) avec le nom temp_log.$$
sont créés avec plusieurs autres fichiers importants que je dois vérifier.
Comment puis-je facilement répertorier tous les fichiers et empêcher temp_log.$$
leur affichage?
Production attendue
$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string
J'ai parcouru la ls
page de manuel mais je n'ai rien trouvé dans cette référence. Veuillez me faire savoir si j'ai oublié des informations vitales ici.
Merci
ls --hide='temp_log.$$'
devrait fonctionner. Vous pouvez / devriez également étendre cela avec des caractères génériques, selon la partie du termetemp_log.$$
.Réponses:
Avec GNU
ls
(la version sur Linux non intégré et Cygwin, parfois également trouvée ailleurs), vous pouvez exclure certains fichiers lors de la liste d'un répertoire.(notez la forme longue de
-I
is--ignore='temp_log.*'
)Avec zsh, vous pouvez laisser le shell filtrer. Passez
-d
àls
afin d'éviter de lister le contenu des répertoires correspondants.Avec ksh, bash ou zsh, vous pouvez utiliser la syntaxe de filtrage ksh. Dans zsh, exécutez d'
setopt ksh_glob
abord. En bash, exécutez enshopt -s extglob
premier.la source
-Itemp_log.*
sans espace après le-I
-I
. Cependant, les*
besoins doivent être cités d'une manière ou d'une autre.-I temp_log.*
ne fonctionne pas , mais-I 'temp_log.*'
,-I "temp_log.*"
,-I temp_log.\*
, etc. sont très bien.Vous pouvez utiliser
grep
avec l'option-v
.la source
Vous pouvez utiliser
find
pour cela:Cela affichera simplement les noms, vous pouvez ajouter
-ls
pour créer unels -l
sortie de style avec horodatage et autorisations, ou utiliser-exec ls {} +
pour passer réellement à ls avec les options que vous souhaitez pour les colonnes, le tri, etc.J'ai écrit ceci en supposant qu'il ne s'agissait que de fichiers dans un répertoire. Si le répertoire contient d'autres répertoires, vous pouvez éviter de les répertorier récursivement
Et si vous utilisez ls vous voulez passer l'option -d pour arrêter ce de liste dans les répertoires suivants :
-exec ls -d {} +
la source
-maxdepth 1
aussi imiter non récursifls
.find
sans-maxdepth
doivent regarder ici .Je pense que vous voulez utiliser une fonction du shell, pas de
ls
. J'utilise bash, j'ai donc vérifié ce que vous voulezman bash
. Recherchez "^ EXPANSION", (en appuyant d'abord sur '/'). Extrait:J'ai récemment commencé à exclure des fichiers en fonction de leur première lettre, avec une commande comme:
Cela correspondrait à tout ce qui ne commence pas par la lettre
t
. Si vous ajoutez plus de caractères entre les crochets, vous excluez également les fichiers commençant par ces lettres.Vous cherchez un lien, et j'en ai un bon! Voir Correspondance de motifs . À partir de là, cela fonctionnerait pour votre cas:
Cela nécessite que l'
extglob
option shell soit activée à l'aide de la commandeshopt
builtin (shopt -s extglob
), comme l'a déclaré Gilles .la source
Fais juste
la source
grep
recherche un modèle dans un fichier, plutôt que dans le nom du fichier.Étant donné que les fichiers que vous ne voulez pas imprimer ont "temp_log". dans le nom de fichier, puis filtrez avec grep:
NOTE: L'autre message avec une réponse similaire a probablement été rejeté parce que l'utilisateur n'a pas inclus de guillemets "" autour de la chaîne que grep devrait rechercher. Sans les guillemets, cela ne fonctionne pas comme annoncé.
la source
temp_log
. Ce n'est pas une bonne façon (générale) d'exclure desls
résultats.-F
, @ smokes2345; un point correspondra à n'importe quel caractère dans une expression régulière de base. Voir: unix.stackexchange.com/q/119905/117549