Le contenu de mon répertoire est
$ ls -lrt
total 0
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 noon.txt
-rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt
Je voudrais lister les détails des fichiers qui ont un mot dans le nom de fichier spécifié.
$ ls -lrt *day|night*
ls: *day: No such file or directory
bash: night.txt: command not found
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt
-rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt
Comment lister différents fichiers correspondant à 2 partenaires différents, ou en bref comment utiliser regex avec ls
, afin que je puisse OR
les parties du nom de fichier.
Scenarion original, il y a beaucoup de fichiers dans le répertoire, ont raccourci le cas pour demander.
Vous n'avez même pas besoin d'activer la globalisation étendue pour faire ce que vous voulez. Cela fonctionnera en bash:
ls {day*,night*}
Il n'y a pas d'option dans ls
pour filtrer sur le nom de fichier mais dans la plupart des shells il y a l'extension globbing man bash
/Pattern Matching
ksh
ls -lrtd -- *@(day|night)*
zsh
setopt extendedglob
ls -lrtd -- *(day|night)*
ou:
setopt kshglob
ls -lrtd -- *@(day|night)*
bash
shopt -s extglob
ls -lrtd -- *@(day|night)*
Dans n'importe lequel de ces trois shells, vous pouvez le faire, mais notez que si l'un des cas ne correspond à aucun fichier, ce modèle sera laissé non développé (par exemple *day* night1.txt othernight.txt
s'il n'y a pas de nom de fichier contenant day
; voir man bash
/EXPANSION
ou /Brace Expansion
Plus précisément):
ls -lrtd -- *{day,night}*
Dans toutes les coquilles, vous pouvez faire:
ls -lrtd -- *day* *night*
Dans zsh, s'il n'y a pas de fichier day
ou night
, les deux dernières commandes échoueront; définissez nonomatch
ou csh_null_glob
option, ou ajoutez (N)
après chaque motif pour éviter cela.
Les shells n'utilisent pas d'expressions régulières pour l'expansion des arguments.
Vous pouvez activer la correspondance de modèle étendue en
$ shopt -s extglob
et alors
$ ls @(day|night).txt
day.txt night.txt
Voir par exemple le Bash Reference Manual (Pattern Matching)