J'essaie actuellement de créer un script qui permettrait à grep d'entrer si quelque chose est d'un certain type de fichier (Zip par exemple), bien que le texte précédant le type de fichier puisse être n'importe quoi, par exemple
something.Zip
this.Zip
that.Zip
tomberaient tous dans la catégorie. J'essaie de les utiliser en utilisant un caractère générique, et jusqu'à présent, j'ai essayé
grep ".*.Zip"
Mais chaque fois que je le fais, les fichiers .Zip
seront trouvés comme il convient, mais ils afficheront quand même des résultats s'il y a des caractères supplémentaires après le .Zip
. Ainsi, par exemple, .zippppppp
ou .zipdsjdskjc
serait toujours récupéré par grep. Cela dit, que dois-je faire pour empêcher grep d’afficher des correspondances comportant des caractères supplémentaires après le .Zip
?
Testez la fin de la ligne avec $
et échappez le second .
avec une barre oblique inversée afin qu'elle ne corresponde qu'à un point et non à un caractère.
grep ".*\.Zip$"
Cependant, ls *.Zip
est un moyen plus naturel de procéder si vous souhaitez répertorier tous les fichiers .Zip
du répertoire actuel ou find . -name "*.Zip"
pour tous les fichiers .Zip
des sous-répertoires à partir de (et notamment) le répertoire actuel.
Sous UNIX, essayez:
find . -name \*.Zip -print
Vous devez faire quelques choses. Ça devrait ressembler à ça:
grep '.*\.Zip$'
Vous devez échapper au second point, il ne fera donc que correspondre à un point et non à un caractère. L'utilisation de guillemets simples facilite l'échappement.
Vous avez besoin du signe dollar en fin de ligne pour indiquer que vous souhaitez que le "Zip" apparaisse en fin de ligne.
J'utilise ceci pour obtenir une liste des types de fichiers dans un dossier.
find . -type f | egrep -i -E -o "\.{1}\w*$" | sort -su
Sorties par exemple:
.DS_Store
.MP3
.aif
.aiff
.asd
.doc
.flac
.jpg
.m4a
.m4p
.m4r
.mp3
.pdf
.png
.txt
.wav
.wma
.Zip
BONUS: avec
find . -type f | egrep -i -E -o "\.{1}\w*$" | sort | uniq -c
Vous obtiendrez le nombre de fichiers:
106 .DS_Store
35 .MP3
89 .aif
5 .aiff
525 .asd
1 .doc
60 .flac
48 .jpg
149 .m4a
11 .m4p
1 .m4r
12844 .mp3
1 .pdf
5 .png
9 .txt
108 .wav
44 .wma
2 .Zip
Essayez: grep -o -E "(\\.([A-z])+)+"
J'ai utilisé cela pour obtenir des extensions multi-pointées/multiples. Ainsi, si l'entrée était hello.tar.gz
, elle générerait .tar.gz
. Pour les points uniques, utilisez grep -o -E "\\.([A-z])+$"
. Tested on Cygwin/MingW + MSYS.
Vous pouvez également utiliser grep pour trouver tous les fichiers avec une extension spécifique:
find .|grep -e "\.gz$"
Le .
signifie le dossier en cours. Si vous voulez spécifier un dossier autre que le dossier actuel, remplacez simplement le .
par le chemin du dossier . Voici un exemple: Permet de rechercher tous les fichiers se terminant par .gz
et se trouvant dans le dossier/var/bûche
find /var/log/ |grep -e "\.gz$"
La sortie ressemble à ce qui suit:
✘ ⚙> find /var/log/ |grep -e "\.gz$"
/var/log//mail.log.1.gz
/var/log//mail.log.0.gz
/var/log//system.log.3.gz
/var/log//system.log.7.gz
/var/log//system.log.6.gz
/var/log//system.log.2.gz
/var/log//system.log.5.gz
/var/log//system.log.1.gz
/var/log//system.log.0.gz
/var/log//system.log.4.gz
Le signe $
indique en gros que l'extension du fichier se termine par gz
Je passe en revue certaines des autres réponses. Le .*
n'est pas nécessaire, et si vous recherchez une certaine extension de fichier, mieux vaut inclure -i pour qu'il ne respecte pas la casse; dans le cas où le fichier est HELLO.Zip, par exemple. Je ne pense pas que les citations sont nécessaires, non plus.
grep -i \.Zip$
Un autre correctif/addon de l'exemple ci-dessus:
# multi-dotted/multiple extensions
grep -oEi "(\\.([A-z0-9])+)+" file.txt
# single dotted
grep -oEi "\\.([A-z0-9])+$" file.txt
Cela aura des extensions de fichiers comme '.mp3' et etc.
Faites simplement:
grep ".*.Zip$"
Le "$" indique la fin de la ligne