Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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

En 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

En 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 smile

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

En 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 smile

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é wink

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,

Tawal #10 a écrit :

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 ! big_smile
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