Comment récupérer certains noms de fichiers en utilisant grep?

J’ai des fichiers comme celui-ci dans un certain répertoire:

my@unix:~/kys$ ls address_modified_20130312.txt customer_rows_full_20131202.txt customer_full_20131201.txt customer_rows_modified_20131202.txt customer_modified_20131201.txt my@unix:~/kys$ 

Je veux utiliser grep pour récupérer certains noms de fichiers qui commencent par un mot “client”. J’ai essayé ça

 my@unix:~/kys$ ls | grep customer.* customer_full_20131201.txt customer_modified_20131201.txt customer_rows_full_20131202.txt customer_rows_modified_20131202.txt my@unix:~/kys$ 

Mais cela me donne ces fichiers customer_rows. * Que je ne veux pas. Le jeu de résultats correct est

 customer_full_20131201.txt customer_modified_20131201.txt 

Comment y parvenir?

Utiliser grep

 ls -1 | grep "^customer_[^r].*$" 

Utilisation de la commande find

 find . \! -iname "customer_rows*" 

Tu peux essayer:

 ls customer_[fm]* 

ou

 ls customer_[^r]* 

Utilisez grep -v pour filtrer ce que vous ne voulez pas.

 ls customer* | grep -v '^customer_rows' 

Avec Bash étendu globbing, vous pourriez dire

 ls customer_!(rows)* 

ou, plus probablement, quelque chose comme

 for f in customer_!(rows)*; do : something with "$f" done 

Avec shell POSIX ou Bourne traditionnel, vous pourriez dire

 for f in customer_*; do case $f in customer_rows* ) continue ;; esac : something with "$f" done