#1 Le 05/11/2018, à 12:18
- diesel
[RESOLU] Aux spécialistes de bash
Bonjour,
Une petite question de syntaxe.
Je veux faire une action (chmod par exemple) sur tous les fichiers et répertoires d'un répertoire (y compris des fichiers et répertoires commençant par un '.') mais sans toucher au répertoire '..'
Par exemple, j'ai la structure suivante :
jean-marie@jean-marie:~/tata_home/toto$ ls -al
total 20
drwxr-xr-x 3 jean-marie delapierre 4096 nov. 5 11:44 .
drwxr-xr-x 3 jean-marie delapierre 4096 nov. 5 12:11 ..
-rw-r--r-- 1 jean-marie delapierre 4 nov. 5 11:43 toto
-rw-r--r-- 1 jean-marie delapierre 5 nov. 5 11:43 .toto
drwxr-xr-x 2 jean-marie delapierre 4096 nov. 5 11:44 .tutu
jean-marie@jean-marie:~/tata_home/toto$
Si je m'amuse à faire un :
chmod -R o-r .*
Au delà du fichier '.toto' et des répertoires '.' et '.tutu' (ce que je veux), cela va s'appliquer au répertoire '..'; le répertoire '~/tata_home' (ce que je ne veux déjà pas), mais aussi à tous ses sous-répertoires (ce que je veux encore moins).
Il y a bien la solution de faire :
cd ~/tata_home
chmod -R o-r toto
Mais je voudrais trouver comment le faire dans le répertoire toto.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 05/11/2018, à 19:56)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#2 Le 05/11/2018, à 13:03
- pingouinux
Re : [RESOLU] Aux spécialistes de bash
Bonjour,
echo * .[!.]*
Ajouté : mais tu n'auras pas les fichiers dont le nom commence par ..
Pour y remédier
echo * .[!.]* ..?*
Dernière modification par pingouinux (Le 05/11/2018, à 13:09)
Hors ligne
#3 Le 05/11/2018, à 14:44
- moko138
Re : [RESOLU] Aux spécialistes de bash
Je parle sous le contrôle de pingouinux.
Gare aux malentendus !
Dans ces lignes :
drwxr-xr-x 3 jean-marie delapierre 4096 nov. 5 11:44 .
drwxr-xr-x 3 jean-marie delapierre 4096 nov. 5 12:11 ..
Le point seul désigne le répertoire dans lequel on se trouve ;
Le point doublé désigne le répertoire immédiatement supérieur.
Donc aucun des deux ne sera ciblé par ton chmod -R o-r .*
Si tu veux faire un chmod -R o-r sur tout le contenu de ~/tata_home/toto/ (y compris les sous-répertoires et les éléments cachés), et seulement sur ce contenu,
une solution est
cd ~/tata_home/toto && sudo chmod -R o-r .
J'ai ajouté un "sudo" parce que si un sous-sous-répertoire n'a pas le droit "x", il ne sera pas possible de l'ouvrir sans sudo.
Dernière modification par moko138 (Le 05/11/2018, à 17:26)
%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel : À la découverte de dcraw
Hors ligne
#4 Le 05/11/2018, à 15:03
- Watael
Re : [RESOLU] Aux spécialistes de bash
aucun des deux ne sera ciblé par ton chmod -R o-r .*
manifestement, si !
$ mkdir -p superieur/courant
$ cd superieur/courant
$ ls .*
.:
..:
courant/
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#5 Le 05/11/2018, à 15:12
- diesel
Re : [RESOLU] Aux spécialistes de bash
Je parle sous le contrôle de pingouinux.
Gare aux malentendus !
Dans ces lignes :drwxr-xr-x 3 jean-marie delapierre 4096 nov. 5 11:44 . drwxr-xr-x 3 jean-marie delapierre 4096 nov. 5 12:11 ..
Le point seul désigne le répertoire dans lequel on se trouve ;
Le point doublé désigne le répertoire immédiatement supérieur.Donc aucun des deux ne sera ciblé par ton chmod -R o-r .*
Ben..., si. J'ai essayé.
Watael (en qui j'ai entière confiance) a parfaitement raison.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#6 Le 05/11/2018, à 15:41
- LeoMajor
Re : [RESOLU] Aux spécialistes de bash
bonjour,
à tester chmod sans -R
shopt -s globstar dotglob
printf "%s\n" /home/jean-marie/tata_home/toto/**/*
chmod o-r /home/jean-marie/tata_home/toto/**/*
Hors ligne
#7 Le 05/11/2018, à 15:41
- diesel
Re : [RESOLU] Aux spécialistes de bash
Merci pingouinux de m'avoir orienté dans la bonne direction.
Je pense avoir trouvé une bonne solution (certainement pas la meilleure mais au moins, ça fonctionne).
jean-marie@jean-marie:~/tata_home/tata_user$ ls -al
total 28
drwxr-xr-x 3 root root 4096 nov. 5 15:32 .
drwxr-xr-x 3 root root 4096 nov. 5 15:27 ..
-rw-r--r-- 1 root root 7 nov. 5 15:18 toto
-rw-r--r-- 1 root root 6 nov. 5 15:20 .toto
drwxr-xr-x 2 root root 4096 nov. 5 15:19 .tutu
-rw-r--r-- 1 root root 5 nov. 5 15:32 ..tutu
-rw-r--r-- 1 root root 5 nov. 5 15:32 ...tutu
jean-marie@jean-marie:~/tata_home/tata_user$
La commande :
jean-marie@jean-marie:~/tata_home/tata_user$ sudo chown -R jean-marie * .!(.)
jean-marie@jean-marie:~/tata_home/tata_user$
Le résultat :
jean-marie@jean-marie:~/tata_home/tata_user$ ls -al
total 28
drwxr-xr-x 3 jean-marie root 4096 nov. 5 15:32 .
drwxr-xr-x 3 root root 4096 nov. 5 15:27 ..
-rw-r--r-- 1 jean-marie root 7 nov. 5 15:18 toto
-rw-r--r-- 1 jean-marie root 6 nov. 5 15:20 .toto
drwxr-xr-x 2 jean-marie root 4096 nov. 5 15:19 .tutu
-rw-r--r-- 1 jean-marie root 5 nov. 5 15:32 ..tutu
-rw-r--r-- 1 jean-marie root 5 nov. 5 15:32 ...tutu
jean-marie@jean-marie:~/tata_home/tata_user$
Qui sait faire mieux ?
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 05/11/2018, à 15:41)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#8 Le 05/11/2018, à 15:47
- diesel
Re : [RESOLU] Aux spécialistes de bash
bonjour,
à tester chmod sans -R
shopt -s globstar dotglob printf "%s\n" /home/jean-marie/tata_home/toto/**/* chmod o-r /home/jean-marie/tata_home/toto/**/*
Bonjour LeoMajor,
Désolé, mais je n'ai rien compris. Tu peux développer ?
- '/home/jean-marie/tata_home/toto' est un fichier,
- la commande 'shopt' a l'air de changer le comportement du shell pour l'interprétation des commandes et je ne suis pas chaud pour ça.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 05/11/2018, à 15:53)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#9 Le 05/11/2018, à 16:13
- Watael
Re : [RESOLU] Aux spécialistes de bash
pour ne pas modifier le comportement du shell courant, tu peux exécuter toutes les commandes indiquées dans un sous-shell, entre parenthèses :
( shopt...
printf ...
chmod... )
de toute façon, les modifications effectuées par shopt ne sont pas pérennes d'une session sur l'autre, donc la fermeture du terminal les annule.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#10 Le 05/11/2018, à 16:28
- diesel
Re : [RESOLU] Aux spécialistes de bash
pour ne pas modifier le comportement du shell courant, tu peux exécuter toutes les commandes indiquées dans un sous-shell, entre parenthèses :
( shopt... printf ... chmod... )
de toute façon, les modifications effectuées par shopt ne sont pas pérennes d'une session sur l'autre, donc la fermeture du terminal les annule.
Tout à fait d'accord.
Cependant, pour ce genre de travaux, la commande chmod (ou chown) n'est qu'une des commandes au milieu de plein d'autres.
Si on a oublié le sous-shell ou de repasser la commande shopt avec les arguments qui vont bien pour revenir au comportement pas défaut ou de se souvenir que le shell ne réagit plus pareil, on risque des catastrophes.
C'est comme de jouer avec la variable IFS. A la limite dans un script en ayant bien pris soin de sauvegarder l'état initial et de le restaurer immédiatement...
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#11 Le 05/11/2018, à 16:32
- LeoMajor
Re : [RESOLU] Aux spécialistes de bash
globstar compense la récursivité -R de chown/chmod
dotglob pour tout début de dot ou "."
shopt -s pour activer -u désactiver ... rien de compliquer à placer dans un script
chown jean-marie:jean-marie /home/jean-marie/tata_home/toto/**/*
Hors ligne
#12 Le 05/11/2018, à 17:48
- pingouinux
Re : [RESOLU] Aux spécialistes de bash
Au delà du fichier '.toto' et des répertoires '.' et '.tutu' (ce que je veux), cela va s'appliquer au répertoire '..'; le répertoire '~/tata_home' (ce que je ne veux déjà pas), mais aussi à tous ses sous-répertoires (ce que je veux encore moins).
Donc, si j'ai bien compris, tu ne veux pas de commandes récursives.
Hors ligne
#13 Le 05/11/2018, à 17:56
- moko138
Re : [RESOLU] Aux spécialistes de bash
Merci à Watael et à diesel83140 de m'avoir tiré d'erreur !
- -
J'ai testé aussi
sudo chmod -R o-r .
qui fait ce que tu demandes en #1, sauf pour le répertoire courant :
moko@c:/.../superieur/courant$ ls -la
total 12
drwxr-xr-x 3 moko moko 4096 nov. 5 17:15 .
drwxr-xr-x 3 moko moko 4096 nov. 5 17:11 ..
-rw-r--r-- 1 moko moko 0 nov. 5 17:14 toto
-rw-r--r-- 1 moko moko 0 nov. 5 17:14 .toto
drwxr-xr-x 2 moko moko 4096 nov. 5 17:15 .tutu
moko@c:/.../superieur/courant$ sudo chmod -R o-r .
[sudo] password for moko:
moko@c:/.../superieur/courant$ ls -la
total 12
drwxr-x--x 3 moko moko 4096 nov. 5 17:15 . # Là
drwxr-xr-x 3 moko moko 4096 nov. 5 17:11 ..
-rw-r----- 1 moko moko 0 nov. 5 17:14 toto
-rw-r----- 1 moko moko 0 nov. 5 17:14 .toto
drwxr-x--x 2 moko moko 4096 nov. 5 17:15 .tutu
moko@c:/.../superieur/courant$
%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel : À la découverte de dcraw
Hors ligne
#14 Le 05/11/2018, à 18:01
- diesel
Re : [RESOLU] Aux spécialistes de bash
diesel83140 #1 a écrit :Au delà du fichier '.toto' et des répertoires '.' et '.tutu' (ce que je veux), cela va s'appliquer au répertoire '..'; le répertoire '~/tata_home' (ce que je ne veux déjà pas), mais aussi à tous ses sous-répertoires (ce que je veux encore moins).
Donc, si j'ai bien compris, tu ne veux pas de commandes récursives.
Ben..., si, mais seulement sur les sous-répertoires qui m'intéressent et pas les autres.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#15 Le 05/11/2018, à 18:29
- bruno
Re : [RESOLU] Aux spécialistes de bash
Je ne comprends pas ce qu ne convient pas un avec un simple chmod récursif :
chmod -R o-r ~/tata_home/toto
#16 Le 05/11/2018, à 19:56
- diesel
Re : [RESOLU] Aux spécialistes de bash
'tain !, je suis vraiment con ! (et personne pour me le dire).
Il suffit simplement de frapper :
sudo chmod -R o-r .
ou
sudo chown -R jean-marie .
Bon, le côté positif de la manip, c'est que ça m'a permis d'apprendre des syntaxes de bash que je ne connaissais pas.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne