Pourquoi "staff * 22" ne montre rien alors que "staff. * 22" répertorie les lignes contenant du personnel suivies de 22 bien que toutes les lignes ne contiennent pas "." en eux?
$ ls -l | grep "staff*22"
$ ls -l | grep "staff.*22"
drwxrwxr-x 2 kim staff 68 Jan 12 22:23 hihi
drwxrwxrwx 4 kim staff 136 Jan 12 22:29 temp2
drwxrwxrwx 3 kim staff 102 Jan 12 22:41 tes2
Il ressort clairement de votre sortie que vous souhaitez rechercher tous les fichiers appartenant au groupe "personnel" et créés à 22 heures (ou 22 heures au format 12 heures). Nous aborderons cette question ci-dessous, mais commençons par comprendre ce que font vos commandes grep
et pourquoi elles ne sont pas le bon outil pour ce que vous voulez.
Tout d'abord, les deux commandes grep
que vous exécutez sont légèrement différentes de la façon dont elles sont interprétées et votre approche n'est pas appropriée - vous ne devriez pas essayer de analyser la sortie de ls .
grep "staff*22"
se lit comme "correspond à toutes les lignes commençant par" staf "et peut contenir ou non un" f "supplémentaire, suivi de" 22 "."
$ echo "staff whatever 22" | grep 'staff*22'
$ echo "staff22" | grep 'staf*22'
staff22
$ echo "staf22" | grep 'staff*22'
staf22
$ echo "staf22" | grep 'staff*22'
staf22
grep "staff.*22"
se lit comme "correspond à toutes les lignes qui ont une" portée ", zéro ou plusieurs caractères entre elles (n'importe quel type de caractère) et le numéro 22".
$ echo "staff whatever 22" | grep 'staff.*22'
staff whatever 22
En règle générale, la commande ls
ne doit être utilisée que pour les listes interactives, c’est-à-dire lorsque vous souhaitez seulement jeter un coup d’œil rapide sur le contenu d’un dossier. Quand il est nécessaire de trouver des fichiers spécifiques, ou de voir comment travailler avec ces fichiers via un script, la commande find
est la voie à suivre. Il contient la variable -group
, qui vous aidera à isoler tous les fichiers appartenant au groupe staff
, et -nevermt
pour rechercher des fichiers dont l’heure de modification est plus récente que celle indiquée. Par exemple, ce que vous voulez, c'est probablement ceci:
find . -group staff -newermt "2017-01-12 21:59:59"
Voir aussi ceci: https://superuser.com/questions/580273/ubuntu-linux-find-files-between-specific-times