Quelle est la command Linux pour returnner tous les files qui commencent par TEMP mais ne se terminent pas par des numbers à deux numbers?
Je pense que ça devrait ressembler à quelque chose comme ça:
ls -l TEMP*[!0-9][!0-9]
mais les résultats de ma search omettent certains résultats, il semble.
Avec GNU et les BSD les plus modernes, find
:
find . -maxdepth 1 -type f -name 'TEMP*' ! -name "*[0-9][0-9]"
POSIXly:
find . ! -name . -prune -type f -name 'TEMP*' ! -name "*[0-9][0-9]"
ksh
ou bash -O extglob
ou zsh -o kshglob
:
ls -ld TEMP*@([^0-9]?|?[^0-9]) [T]EMP TEMP?
Si votre shell est ksh
, ou bash
avec l'option shopt -s extglob
( shopt -s extglob
pour l'activer), alors
ls -d TEMP!(*[0-9][0-9])
devrait marcher. Si vous voulez effectuer une search récursive et que globstar est activé ( set -o globstar
dans ksh93
, shopt -s globstar
dans bash
), vous devriez pouvoir le faire en tant que
ls -d -- **/TEMP!(*[0-9][0-9])
(notez qu'il ne traverse pas les directorys cachés par défaut)
Par exemple, si
$ ls -d -- **/TEMP* TEMP12345 TEMP123ab TEMPabc12 TEMPabcde tests/TEMP12345 tests/TEMP123ab tests/TEMPabc12 tests/TEMPabcde
puis
$ ls -d -- **/TEMP!(*[0-9][0-9]) TEMP123ab TEMPabcde tests/TEMP123ab tests/TEMPabcde
L'équivalent en zsh
est:
setopt extendedglob ls -d -- **/TEMP^*[0-9][0-9]
Votre idée est ok: à la search de tout commençant par temp et ne se terminant pas par deux numbers. Malheureusement, je pense que vous avez fait une erreur de syntaxe. Vous devriez replace! par ^. Alors maintenant, vous searchz des files comme: temp * 99 et temp * !!.