2017-09-22 4 views
0

Je suis en train d'imprimer uniquement des lignes spécifiques de la sortie en fonction de mots clés en utilisant grepla sortie de la commande ls en utilisant grep

ls -RlA | grep foo | sed -n '1 p' 
ls -RlA | grep bar | sed -n '1 p' 
ls -RlA | grep foo_file 
ls -RlA | grep bar_file 

est-il un moyen de simplifier ces déclarations en une seule commande?

P.S: ordre n'a pas d'importance

+0

Avez-vous regardé la commande find? – 123

+0

Oui, j'ai. Mais, je veux imprimer la sortie ls -l uniquement liée aux mots-clés "foo_file", "bar_file", "foo" et "bar". Je ne pense pas trouver serait-il utile de faire cela? – kingmakerking

+3

quelle partie de la sortie recherchez-vous? Le nom de fichier? Ajoutez un exemple complet à votre question. – 123

Répondre

2

Trouver tous les fichiers ou répertoires avec les noms donnés:

find . '(' -name foo -o -name bar -o -name foo_file -o -name bar_file ')' -ls 

Une version plus compacte en utilisant une expression régulière:

find . -regex '.*/\(foo\|bar\|foo_file\|bar_file)' -ls 

comme ci-dessus, mais vérifiez que foo_file et bar_file sont des fichiers, et non répertoires:

find . '(' -name foo -o -name bar -o -name foo_file -type f -o -name bar_file -type f ')' -ls 
1

Ici, dans une commande.

ls -la **/{foo,bar,foo_file,bar_file} 

Vous pouvez également utiliser * à l'intérieur {}, comme {*.txt,foo_*.zip}.

Notez que cela ne fonctionnera pas si l'un des champs {} est introuvable.