#1 Le 29/10/2021, à 14:09
- fplus39
[RESOLU] souci sur commande rm
Bonjour,
Je rencontre un souci dans un script bash avec la commande rm
Je désire supprimer tous les fichiers sauf .mp3 et .wav
Je fais donc ceci après avoir configuré $CPATH:
for file in $CPATH/Input/*; do rm -v *.!(mp3|wav); done
J'ai aussi essayé ceci :
for file in $CPATH/Input/*; do rm -v !(*/mp3|*/wav); done
Mais dans tous les cas j'obtiens cette erreur :
./monscript.sh: ligne 14: erreur de syntaxe près du symbole inattendu « ( »
./monscript.sh: ligne 14: `for file in $CPATH/Input/*; do rm -v *.!(mp3|wav); done'
pourriez vous m'aider à résoudre ce souci?
Merci à vous tous
bonne journée
Dernière modification par fplus39 (Le 12/11/2021, à 12:10)
Hors ligne
#2 Le 29/10/2021, à 14:45
- geole
Re : [RESOLU] souci sur commande rm
Bonjour
Ce n'est pas un problème de rm!
a@a:~/essai/Input/fi$ for file in $CPATH/Input/*; do rm -v !(*/mp3|*/wav); done
'fic' supprimé
a@a:~/essai/Input/fi$
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#3 Le 29/10/2021, à 15:04
- fplus39
Re : [RESOLU] souci sur commande rm
Du coup désolé, mais je ne comprends pas où j'ai fait une erreur :
#!/bin/bash
CPATH="/home/monuser/Documents/folder1/folder2"
echo "Validation des noms de fichiers :"
for file in $CPATH/Input/*; do mv "$file" `echo $file | tr ' ' '_'`; done
echo "Nettoyage des fichiers autres que mp3 et wav :"
for file in $CPATH/Input/*; do rm -v *.!(mp3|wav); done
la première commande s'effectue sans souci
Hors ligne
#4 Le 29/10/2021, à 15:26
- geole
Re : [RESOLU] souci sur commande rm
Il n'y a toujours pas d'erreur
~$ sudo mkdir -p /home/monuser/Documents/folder1/folder2/Input/
a@a:~$
a@a:~$ #!/bin/bash
a@a:~$ CPATH="/home/monuser/Documents/folder1/folder2"
a@a:~$ echo "Validation des noms de fichiers :"
Validation des noms de fichiers :
a@a:~$ for file in $CPATH/Input/*; do mv "$file" `echo $file | tr ' ' '_'`; done
mv: impossible d'évaluer '/home/monuser/Documents/folder1/folder2/Input/*': Aucun fichier ou dossier de ce type
a@a:~$
a@a:~$ echo "Nettoyage des fichiers autres que mp3 et wav :"
Nettoyage des fichiers autres que mp3 et wav :
a@a:~$ for file in $CPATH/Input/*; do rm -v *.!(mp3|wav); done
rm: impossible de supprimer '*.!(mp3|wav)': Aucun fichier ou dossier de ce type
a@a:~$
et après avoir créé un fichier
a@a:~$ #!/bin/bash
a@a:~$ CPATH="/home/monuser/Documents/folder1/folder2"
a@a:~$ echo "Validation des noms de fichiers :"
Validation des noms de fichiers :
a@a:~$ for file in $CPATH/Input/*; do mv "$file" `echo $file | tr ' ' '_'`; done
mv: '/home/monuser/Documents/folder1/folder2/Input/fichier.fic' et '/home/monuser/Documents/folder1/folder2/Input/fichier.fic' identifient le même fichier
a@a:~$
a@a:~$ echo "Nettoyage des fichiers autres que mp3 et wav :"
Nettoyage des fichiers autres que mp3 et wav :
a@a:~$ for file in $CPATH/Input/*; do rm -v *.!(mp3|wav); done
rm: impossible de supprimer '*.!(mp3|wav)': Aucun fichier ou dossier de ce type
a@a:~$
a@a:~$ #!/bin/bash
a@a:~$ CPATH="/home/monuser/Documents/folder1/folder2"
a@a:~$ echo "Validation des noms de fichiers :"
Validation des noms de fichiers :
a@a:~$ for file in $CPATH/Input/*; do mv "$file" `echo $file | tr ' ' '_'`; done
mv: '/home/monuser/Documents/folder1/folder2/Input/fichier.fic' et '/home/monuser/Documents/folder1/folder2/Input/fichier.fic' identifient le même fichier
a@a:~$
a@a:~$ echo "Nettoyage des fichiers autres que mp3 et wav :"
Nettoyage des fichiers autres que mp3 et wav :
a@a:~$ for file in $CPATH/Input/*; do rm -v !(*/mp3|*/wav); done
'Bureau' supprimé
'DATE' supprimé
'Documents' supprimé
rm: impossible de supprimer 'essai': est un dossier
rm: impossible de supprimer 'Essai1': est un dossier
rm: impossible de supprimer 'Essai2': est un dossier
rm: impossible de supprimer 'Essai3': est un dossier
rm: impossible de supprimer 'Essai4': est un dossier
'Images' supprimé
Dernière modification par geole (Le 29/10/2021, à 15:38)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#5 Le 29/10/2021, à 15:30
- fplus39
Re : [RESOLU] souci sur commande rm
Bonjour Geole,
Désolé, mais je ne comprends pas ce que tu essaies de me dire...
Si ce n'est que chez toi, aucune des 2 commandes ne réussit alors que chez moi la première réussit mais pas la 2eme.
Merci à toi
Hors ligne
#6 Le 29/10/2021, à 15:44
- LeoMajor
Re : [RESOLU] souci sur commande rm
salut,
c'est le même genre de commande que
shopt -s extglob globstar
for f in ~/Images/**.!(png|jpg) ; do test -f "$f" && echo "$f"; done
globstar est facultatif (simule la récursivité)
test -f "$f" aussi
retourne tout sauf les png et jpg dans l'exemple
Hors ligne
#7 Le 29/10/2021, à 15:45
- geole
Re : [RESOLU] souci sur commande rm
La réussite est une chose. Cela supprime aussi des fichiers qui sont ailleurs
Je croyais que ton problème était la codification avec ce message d'erreur
erreur de syntaxe près du symbole inattendu « ( »
Dernière modification par geole (Le 29/10/2021, à 15:48)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#8 Le 29/10/2021, à 22:24
- kamaris
Re : [RESOLU] souci sur commande rm
Dans un script tu dois penser à activer extglob, comme dit par LeoMajor en #6.
Par ailleurs, tu n'as pas besoin de boucle :
shopt -s extglob
rm -v "$CPATH/Input/"*.!(mp3|wav)
Hors ligne
#9 Le 12/11/2021, à 12:10
- fplus39
Re : [RESOLU] souci sur commande rm
Bonjour à tous,
Merci pour ces explications que j'ai enrichies avec les docs correspondantes
Et effectivement, ça répond bien à ma problématique donc merci encore
Hors ligne
#10 Le 12/11/2021, à 20:13
- Tawal
Re : [RESOLU] souci sur commande rm
Hello,
J'ai suivi cette discussion.
Mais, @kamaris, cela ne fonctionne pas chez moi :
$ shopt -s extglob
$ for f in {a..d}; do touch $f $f.sh $f.bash; done
$ ls -l
total 0
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 a
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 a.bash
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 a.sh
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 b
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 b.bash
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 b.sh
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 c
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 c.bash
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 c.sh
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 d
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 d.bash
-rw-r--r-- 1 tawal tawal 0 12 nov. 19:40 d.sh
$ rm *.!(sh|bash)
rm: opérande manquant
Saisissez « rm --help » pour plus d'informations.
$ rm ./*.!(sh|bash)
rm: opérande manquant
Saisissez « rm --help » pour plus d'informations.
$
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#11 Le 12/11/2021, à 20:37
- kamaris
Re : [RESOLU] souci sur commande rm
Si, si, ça marche : rm dit la vérité
Hors ligne
#12 Le 12/11/2021, à 21:07
- MicP
Re : [RESOLU] souci sur commande rm
Bonjour
michel@debbull:~$ cpath="$HOME/tests"
michel@debbull:~$ mkdir "$cpath" && touch "$cpath"/{a..c}{,.mp3,.wav} && ls -l "$cpath"
total 0
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 a
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 a.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 a.wav
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 b
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 b.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 b.wav
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 c
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 c.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:06 c.wav
michel@debbull:~$
michel@debbull:~$ for f in "$cpath"/!(*.mp3|*.wav); do [ -f "$f" ] && echo rm "$f"; done
rm /home/michel/tests/a
rm /home/michel/tests/b
rm /home/michel/tests/c
michel@debbull:~$
Dernière modification par MicP (Le 12/11/2021, à 21:43)
Hors ligne
#13 Le 12/11/2021, à 21:18
- kamaris
Re : [RESOLU] souci sur commande rm
Mais fplus39 n'avait pas besoin de tout ça, car tous ses fichiers avaient une extension (certes, c'est implicite).
Donc sa commande de départ était presque bonne, il lui manquait surtout le extglob.
Dernière modification par kamaris (Le 13/11/2021, à 10:04)
Hors ligne
#14 Le 12/11/2021, à 21:40
- MicP
Re : [RESOLU] souci sur commande rm
Je n'avais sans doute pas bien compris en lisant ses messages,
alors comme ça :
michel@debbull:~$ cpath="$HOME/tests"
michel@debbull:~$ mkdir -p "$cpath/sousRep" && touch "$cpath"/{{a..c},sousRep/{x..z}}{,.mp3,.wav} && ls -lR "$cpath"
/home/michel/tests:
total 4
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 a
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 a.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 a.wav
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 b
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 b.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 b.wav
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 c
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 c.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 c.wav
drwxr-xr-x 2 michel michel 4096 12 nov. 21:37 sousRep
/home/michel/tests/sousRep:
total 0
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 x
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 x.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 x.wav
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 y
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 y.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 y.wav
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 z
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 z.mp3
-rw-r--r-- 1 michel michel 0 12 nov. 21:37 z.wav
michel@debbull:~$
michel@debbull:~$ shopt -s extglob globstar
michel@debbull:~$ for f in "$cpath"/**/!(*.mp3|*.wav); do [ -f "$f" ] && echo rm "$f"; done
rm /home/michel/tests/a
rm /home/michel/tests/b
rm /home/michel/tests/c
rm /home/michel/tests/sousRep/x
rm /home/michel/tests/sousRep/y
rm /home/michel/tests/sousRep/z
michel@debbull:~$
Dernière modification par MicP (Le 12/11/2021, à 21:45)
Hors ligne
#15 Le 13/11/2021, à 09:29
- pingouinux
Re : [RESOLU] souci sur commande rm
Bonjour,
Mais, @kamaris, cela ne fonctionne pas chez moi :
$ rm *.!(sh|bash) rm: opérande manquant Saisissez « rm --help » pour plus d'informations.
La bonne commande est :
rm *.!(sh\|bash)
Édité :
Je me suis trompé, comme le dit kamaris dans le message qui suit. Ne pas tenir compte de mon message.
Dernière modification par pingouinux (Le 13/11/2021, à 10:32)
Hors ligne
#16 Le 13/11/2021, à 10:03
- kamaris
Re : [RESOLU] souci sur commande rm
Mais non !
Cette commande est fausse, et la bonne commande est celle que j'ai donnée en #8.
Le problème de départ était de supprimer, dans un répertoire $dir, tous les fichiers ayant une extension (c'est implicite dans le message #1), et dont l'extension ne se trouve pas dans une certaine liste ext1, ext2, …, extN.
Et cela sans récursivité inutile car ce n'est pas demandé.
La réponse à cette question est bien :
shopt -s extglob
rm -v "$dir/"*.!(ext1|ext2|…|extN)
EDIT: et si vraiment on veut supprimer aussi les fichiers sans extension, il suffit de faire rentrer l'astérisque dans le pattern :
shopt -s extglob
rm -v "$dir/"!(*.ext1|*.ext2|…|*.extN)
Dernière modification par kamaris (Le 13/11/2021, à 10:24)
Hors ligne
#17 Le 14/11/2021, à 01:39
- Tawal
Re : [RESOLU] souci sur commande rm
Hello
J'ai compris mon erreur, ça fonctionne très bien :
$ touch {a..c}{,.wma,.mp3,.wav} && ls -l
total 0
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 a
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 a.mp3
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 a.wav
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 a.wma
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 b
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 b.mp3
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 b.wav
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 b.wma
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 c
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 c.mp3
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 c.wav
-rw-r--r-- 1 tawal tawal 0 14 nov. 01:34 c.wma
$
$ rm -v *.!(mp3|wav)
'a.wma' supprimé
'b.wma' supprimé
'c.wma' supprimé
$
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne