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 05/11/2018, à 13: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, à 20: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, à 14: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, à 14:09)

Hors ligne

#3 Le 05/11/2018, à 15: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, à 18:26)


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#4 Le 05/11/2018, à 16: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, à 16:12

diesel

Re : [RESOLU] Aux spécialistes de bash

moko138 a écrit :

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, à 16: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, à 16: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, à 16: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, à 16:47

diesel

Re : [RESOLU] Aux spécialistes de bash

LeoMajor a écrit :

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, à 16: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, à 17: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, à 17:28

diesel

Re : [RESOLU] Aux spécialistes de bash

Watael a écrit :

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, à 17: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, à 18:48

pingouinux

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.

Hors ligne

#13 Le 05/11/2018, à 18: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, à 19:01

diesel

Re : [RESOLU] Aux spécialistes de bash

pingouinux a écrit :
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. wink smile

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, à 19: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

Hors ligne

#16 Le 05/11/2018, à 20:56

diesel

Re : [RESOLU] Aux spécialistes de bash

'tain !, je suis vraiment con ! (et personne pour me le dire). wink smile smile smile

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