Gegeben der folgende Verzeichnisbaum:
.
├── d1
│ └── workspace
├── d2
│ └── workspace
├── d3
│ └── workspace
├── d4
│ └── workspace
└── d5
└── workspace
Ich muss die Berechtigungen für alle workspace
Verzeichnisse wie folgt festlegen :
chmod -R 774 d1 / Arbeitsbereich
chmod -R 774 d2 / Arbeitsbereich
...
Wie kann ich die oben genannten Operationen in einem Befehl für alle workspace
Verzeichnisse ausführen ? Ich kann den folgenden Befehl ausführen:
chmod -R 774 *
Dies ändert jedoch auch den Modus der übergeordneten Verzeichnisse, was nicht erwünscht ist.
bash
permissions
chmod
recursive
Meysam
quelle
quelle
Antworten:
Sie können Platzhalter im Verzeichnis der obersten Ebene verwenden.
Um es genauer zu machen, können Sie den Platzhalter auch auf
d
eine einzelne Ziffer beschränken.Ein allgemeinerer Ansatz könnte mit sein
find
.quelle
-type d
zu Ihremfind
Befehl hinzufügen ?-type d
Argument mit find zu verwenden, sodass nur Verzeichnisse zurückgegeben werden, anstatt zu hoffen, dass es keine Dateien gibt, deren Namen mit 'd' beginnen.d*/
und stimmtd[0-9]/
nur mit Verzeichnissen überein, deren Namen mit beginnend
, und derfind
Befehl betrachtet überhaupt keine Namen, die mit beginnend
. Das Problem besteht darin, benannte Dateien zu vermeidenworkspace
.-R
Flag verwendet. Vielleicht möchten sie, dass die Berechtigungen rekursiv unter den Arbeitsbereichsverzeichnissen festgelegt werden.workspace
Verzeichnis festgelegt werden. @Meysam: Vielleicht können Sie klären, ob die Berechtigungen nur für dasworkspace
Verzeichnis festgelegt werden sollen, oder ob Sie dies für diese Verzeichnisse rekursiv tun.In einer Shell wie dieser können
bash
Sie die erweiterte Globbing-Option verwenden, um zuerst alle genannten Verzeichnisseworkspace
undchmod
sie auf einmal zu markierenDie Option
nullglob
ist sicher , dass die glob Erweiterung wirft keinen Fehler zu machen , wenn es nicht nicht alle Dateien auf dem Weg finden. Dadurch wird auch sichergestellt, dass die leere Glob-Zeichenfolge nicht als Teil des Arrays enthalten ist. Dieglobstar
Option ist für rekursives Globbing aktiviert.Markieren Sie nun diese Verzeichnisse in einem Shell-Array als
Als weitere Überprüfung der Integrität können Sie zuerst das Array drucken, um festzustellen, ob alle erforderlichen Verzeichnisse berücksichtigt wurden. Überprüfen Sie, ob alle Verzeichnisse unten aufgeführt sind, wenn Sie den folgenden
printf()
Befehl ausführen.Dadurch wird das Array mit allen rekursiven füllen
workspace
Ordner, jetzt wir verwenden müssen ,chmod
auf siequelle
Der
chmod
Befehl hat eine nette Verknüpfung zum Setzen des ausführbaren Bits nur für Verzeichnisse, wie folgt:Dies ist sehr praktisch, um einen ganzen Verzeichnisbaum für jedermann lesbar zu machen, ohne das ausführbare Bit für reguläre Dateien zu setzen:
quelle
X
Setzt das ausführbare Bit für Verzeichnisse und alle Dateien mit einem gesetzten ausführbaren Bit . Im Allgemeinen macht das keinen großen Unterschied (da bei ausführbaren Dateien normalerweise das Bit für alle gesetzt ist), aber es kann in einigen Fällen von Bedeutung sein. Beachten Sie auch, dass Sie mit diesem Trick den Modus 774 nicht erhalten können.quelle