it-swarm.com.de

Wie kann ich eine bestimmte Liste von Dateien chmod / chown?

Ich möchte ein .sh-Skript schreiben, um einige Ordnerberechtigungen einzurichten, habe mich aber gefragt, ob ich Folgendes ausführen kann:

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

um eine Liste von Ordnern anzuzeigen, anstatt chown mehrmals aufzurufen.

Gibt es auch eine Möglichkeit, eine Liste von Dateien anzuzeigen und andere auszuschließen, wie zum Beispiel:

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

Ich hoffe, meine Pseudo-Kommandozeilen machen Sinn.

26

Fast alle Unix-Tools akzeptieren eine Liste von Dateien als Nichtoptionsargumente. Wie üblich müssen die verschiedenen Argumente durch Leerzeichen getrennt werden:

chown 644 one two three

Wenn Sie in Ihrem zweiten Beispiel Bash verwenden, ist dies ein einfaches Beispiel

chown -R 644 !(cache)

wird genug sein.

Dieser Ansatz erfordert einen erweiterten Musterabgleich. Wenn es deaktiviert ist, können Sie es mit aktivieren

shopt -s extglob

Siehe: Bash Reference Manual # Pattern Matching

37
Dennis

Erstellen Sie eine Liste der Dateinamen in mod-these.txt und führen Sie dann Folgendes aus:

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

oder verwenden Sie die hier von anderen beschriebene Methode:

chown 644 one two three

oder gehen Sie mit der ersten Option in die Stadt, aber ändern Sie jede Zeile in der Datei (in diesem Beispiel: ersetzen Sie "/" (mit Leerzeichen zuvor) durch "./"):

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

regex für den Gewinn!

die Verwendung von find ist die beste Möglichkeit, die ich mir vorstellen kann, außerhalb der Verwendung der regulären Ausdrücke, die möglicherweise bereits in Ihrer speziellen Shell oder in der App, die Sie selbst verwenden, vorhanden sind. zuerst habe ich versucht:

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

Sie werden jedoch feststellen, dass die Pipe in diesem Fall nicht funktioniert. Eine andere traurige Sache zu lernen ... wie das Lernen von chmod, chown, chgrp, et. al. unterstützt nicht die Auswahl mehrerer Dateien/Regex/den Ausschluss selbst ...
Die Lösung, die ich gefunden habe:
https://stackoverflow.com/questions/19111067/regex-match-either-string-in-linux-find-command

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

also, nicht so viel Regex für den Gewinn, aber zumindest haben wir eine Möglichkeit, eine Liste von Dateien in die Argumente eines Programms in einer Zeile einzufügen.

sie werden feststellen, dass Sie die () -Metazeichen und den -o-Parameter für jeden weiteren Namen maskieren müssen ...

andere Links und Inhalte von mir, die Sie auf Ihren Reisen interessieren könnten:
Verschiedene Leckerbissen - Notizen von korn bourne und Freunden. - Dave Horner's Website

Prost.
- Dave

2
Dave Horner

Wenn sich die zu ändernden Dateien in einem Verzeichnis befinden, können Sie sie mit dem erforderlichen Muster versehen.

z.B. Ich benötige alle heruntergeladenen .run-Dateien in pwd, um sie in eine ausführbare Datei zu ändern:

chmod +x `ls *.run`
2
gat1