script bash

Le
Didier
Bonjour Í  tou(te)s,

Pourquoi la ligne de commande
« shred --remove --verbose --zero !(*.gpg) »
fait bien ce qu'elle doit,
mais que ça coince quand elle se trouve dans
un script bash ? y a-t-il une parade ?
Le message d'erreur : «
erreur de syntaxe près du symbole inattendu « ( »
/home/didier/bin/gpgc: ligne 9: ` shred --remove --verbose --zero
!(*.gpg)'

»

Librement,
Didier.

--
ma céramique : http://didierdescamps.fr
autres bouts de vie : http://didierdescamps.free.fr
--
  • Partager ce contenu :
Vos réponses Page 1 / 3
Trier par : date / pertinence
Nicolas George
Le #26574753
Didier , dans le message écrit :
Pourquoi la ligne de commande
« shred --remove --verbose --zero !(*.gpg) »
fait bien ce qu'elle doit,
mais que ça coince quand elle se trouve dans
un script bash ?

Probablement parce que le bash interactif active l'option nécessaire.
Didier
Le #26574776
Le 07/06/2021 Í  15:50, Didier a écrit :
en fouillant un peu, j'arrive Í  mes fins en remplaçant la
ligne unique par ces 5 lÍ  :
for a in *; do
if [ "${a: -3}" != "gpg" ] ; then
shred --remove --verbose --zero $a
fi
done
mais il doit y avoir moyen de faire plus simple ?
--
ma céramique : http://didierdescamps.fr
autres bouts de vie : http://didierdescamps.free.fr
--
Benoit Izac
Le #26574777
Bonjour,
Le 07/06/2021 Í  20:18, Didier a écrit dans le message
en fouillant un peu, j'arrive Í  mes fins en remplaçant la
ligne unique par ces 5 lÍ  :
for a in *; do
if [ "${a: -3}" != "gpg" ] ; then
shred --remove --verbose --zero $a
fi
done
mais il doit y avoir moyen de faire plus simple ?

shopt -s extglob
--
Benoit Izac
Francois Lafont
Le #26574792
Hello,
Perso, pour ces trucs lÍ , j'aime bien utiliser find et éviter le plus possible des
« siouxeries » de la syntaxe bash :
find /mon/repertoire/ -maxdepth 1 -mindepth 1 -type f '!' -name '*.gpg' -exec shred --remove --verbose --zero '{}' ';'
La petite différence ici est que 1) ça ne prendra pas les répertoires et 2) les
fichiers dont le nom commence par un point seront pris en compte.
Ceci dit, la petite boucle for de Didier me semble pas mal, plutÍ´t explicite ce qui
est une bonne idée surtout quand c'est fait pour effacer des données.
--
François Lafont
Didier
Le #26574861
Le 08/06/2021 Í  10:09, Francois Lafont a écrit :
find /mon/repertoire/ -maxdepth 1 -mindepth 1 -type f '!' -name '*.gpg'
-exec shred --remove --verbose --zero '{}' ';'

Ça fait le job, et c'est beau !
Mais comme je suis (éternellement) débutant dans ce sport et que j'ai
une autre exigence dont je n'ai pas parlé, je suis arrivé Í  ça.
Le critère répertoire serait-il incorporable dans find ?
#!/bin/bash
# supprime tout ce qui n'est pas un fichier chiffré (.gpg)
# sans explorer les sous répertoires.
# Mais uniquement dans ~/.z , car trop dangereux ailleurs
# Didier Descamps, juin 2021.
ou=`pwd`
if [ "${ou:12:3}" = '/.z' ] ; then
for a in *; do
if [ "${a: -4}" != ".gpg" ] && [ -f $a ]; then
shred --remove --verbose --zero $a
fi
done
else
echo "Interdit dans ce répertoire !"
fi
Olivier Miakinen
Le #26574869
Bonjour,
Juste deux petites remarques.
Le 08/06/2021 20:06, Didier a écrit :
ou=`pwd`

La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans
un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible,
et qui peut s'imbriquer.
ou=$(pwd)
if [ "${ou:12:3}" = '/.z' ] ; then

Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire
nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}"
serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í  plusieurs home
de longueur différente et que seul le /.z final compte.
Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes :
if [ "$(basename $(pwd))}" = '.z' ] ; then
--
Olivier Miakinen
Olivier Miakinen
Le #26574870
[Supersedes Í  cause d'une accolade laissée par erreur]
Bonjour,
Juste deux petites remarques.
Le 08/06/2021 20:06, Didier a écrit :
ou=`pwd`

La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans
un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible,
et qui peut s'imbriquer.
ou=$(pwd)
if [ "${ou:12:3}" = '/.z' ] ; then

Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire
nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}"
serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í  plusieurs home
de longueur différente et que seul le /.z final compte.
Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes :
if [ "$(basename $(pwd))" = '.z' ] ; then
--
Olivier Miakinen
Benoit Izac
Le #26574871
Bonjour,
Le 08/06/2021 Í  21:14, Olivier Miakinen a écrit dans le message
ou=`pwd`

La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans
un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible,
et qui peut s'imbriquer.

^^^^^^^^^^^^^^^^^^^^^^^
«Â `…` » s'imbrique aussi, c'est juste qu'il faut les échapper.
«Â $(…) » a aussi ses petits problèmes :
% echo `(uname -s)`
Linux
% echo $((uname -s))
0
--
Benoit Izac
Didier
Le #26574872
Le 08/06/2021 Í  21:22, Olivier Miakinen a écrit :
ou=$(pwd)

Right!
if [ "${ou:12:3}" = '/.z' ] ; then

Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire
nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}"
serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í  plusieurs home
de longueur différente et que seul le /.z final compte.
Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes :
if [ "$(basename $(pwd))" = '.z' ] ; then

Mais je veux que ça fonctionne aussi dans les sous-répertoires du
consacré secret
~/.z , or pwd retourne /.z et non /.z/ et je ne peux donc pas tester un
16eme caractère.À moins de tester aussi la longueur ? ça risque de se
compliquer alors.
pehache
Le #26574876
Le 08/06/2021 Í  21:47, Benoit Izac a écrit :
Bonjour,
Le 08/06/2021 Í  21:14, Olivier Miakinen a écrit dans le message
ou=`pwd`

La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans
un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible,
et qui peut s'imbriquer.

^^^^^^^^^^^^^^^^^^^^^^^
«Â `…` » s'imbrique aussi, c'est juste qu'il faut les échapper.

Et ça peut rapidement devenir totalement illisible, y compris pour celui
qui essaie de l'écrire.
«Â $(…) » a aussi ses petits problèmes :
% echo `(uname -s)`
Linux
% echo $((uname -s))
0

Tu te fais éventuellement avoir une ou deux fois avec ça, et après tu
retiens. L'illisibilité des backquote imbriquées par contre elle reste.

--
"...sois ouvert aux idées des autres pour peu qu'elles aillent dans le
même sens que les tiennes.", ST sur fr.bio.medecine
Poster une réponse
Anonyme