Dans un répertoire, vous avez plusieurs fichiers - .txt
, .sh
puis planifier les fichiers sans .foo
modificateur.
Si vous ls
le répertoire:
blah.txt
blah.sh
blah
blahs
Comment dire à une boucle for de n'utiliser que des fichiers sans .foo
modifier? Donc, "faites des trucs" sur les fichiers blah et blahs dans l'exemple ci-dessus.
La syntaxe de base est:
#!/bin/bash
FILES=/home/shep/Desktop/test/*
for f in $FILES
do
XYZ functions
done
Comme vous pouvez le voir, cela boucle efficacement sur tout dans le répertoire. Comment exclure le .sh
, .txt
ou tout autre modificateur?
J'ai joué avec certaines instructions if, mais je suis vraiment curieux de pouvoir sélectionner ces fichiers non modifiés.
Quelqu'un pourrait-il également me dire le jargon approprié pour ces fichiers de texte brut sans .txt?
#!/bin/bash
FILES=/home/shep/Desktop/test/*
for f in $FILES
do
if [[ "$f" != *\.* ]]
then
DO STUFF
fi
done
Si vous le voulez un peu plus complexe, vous pouvez utiliser la commande find-command.
Pour le répertoire actuel:
for i in `find . -type f -regex \.\\/[A-Za-z0-9]*`
do
WHAT U WANT DONE
done
explication:
find . -> starts find in the current dir
-type f -> find only files
-regex -> use a regular expression
\.\\/[A-Za-z0-9]* -> thats the expression, this matches all files which starts with ./
(because we start in the current dir all files starts with this) and has only chars
and numbers in the filename.
Vous pouvez utiliser des caractères génériques négatifs? pour les filtrer:
$ ls -1
a.txt
b.txt
c.png
d.py
$ ls -1 !(*.txt)
c.png
d.py
$ ls -1 !(*.txt|*.py)
c.png