Come posso chmod / chown un elenco specifico di file?


31

Voglio scrivere uno script .sh per impostare alcune autorizzazioni per le cartelle, ma mi chiedo se posso eseguire qualcosa del tipo:

chown -644 ./one;/two;/three

chown un elenco di cartelle, piuttosto che chiamare chown più volte.

Inoltre, ci sarebbe un modo per chown un elenco di file ed escluderne altri, come ad esempio:

chown -R -664 ./*;!./cache

Spero che le mie pseudo linee di comando abbiano un senso.

Risposte:


43

Quasi tutti gli strumenti Unix accettano un elenco di file come argomenti non opzionali. Come al solito, i diversi argomenti devono essere separati dallo spazio:

chown 644 one two three

Nel tuo secondo esempio, se stai usando Bash, un semplice

chown -R 644 !(cache)

sarà abbastanza.

Questo approccio richiede una corrispondenza estesa del modello. Se è disabilitato, puoi abilitarlo con

shopt -s extglob

Vedere: Manuale di riferimento di Bash # Corrispondenza di motivi


4

Crea un elenco di nomi di file in mod-these.txt e poi esegui:

chmod g+w `cat mod-these.txt`

o usa il metodo descritto da altri qui:

chown 644 one two three

oppure vai in città con la prima opzione ma manipola ogni riga nel file (in questo esempio: sostituisci "/" (CON spazi bianchi prima) con "./"):

chmod g+w `sed 's/ \// .\//' update-writable.txt` 

2

regex per la vittoria!

usare find è il modo migliore che mi viene in mente al di fuori dell'uso della regex che potrebbe già esistere nella tua particolare shell o all'interno dell'app che stai usando. prima ho provato:

touch one&touch two &touch three&find -name "one|two|three" -exec chown -644 {} \;

Ma scoprirai che la pipa non funziona in questo caso. Un'altra cosa triste da imparare ... come imparare chmod, chown, chgrp, et. al. non supporta la selezione / esclusione multi-file / regex in sé ...
La soluzione che ho trovato:
/programming/19111067/regex-match-either-string-in-linux-find-command

find \( -name one -o -name two -o -name three \) -exec chown -644 {} \;

quindi, non tanto regex per la vittoria, ma almeno abbiamo un modo per iniettare un elenco di file negli argomenti di un programma in una riga.

noterai che devi sfuggire ai meta-caratteri () e l'aggiunta del parametro -o per ogni nome aggiuntivo ...

altri link e contenuti da me che potrebbero interessarti durante i tuoi viaggi:
Vari bocconcini - note di Korn Bourne e amici. - Sito Web di Dave Horner

Saluti.
--dave


I KISS vincono, mantienili semplici e stupidi! non c'è bisogno di cose complesse che possono essere ancora pulite e facili.
Al-Mothafar,

2

Se i file che si desidera modificare si trovano in una directory, è possibile utilizzarli con il modello necessario.

ad esempio, ho bisogno che tutti i file .run scaricati in pwd siano cambiati in eseguibili:

chmod +x `ls *.run`
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.