Ich habe ein Archiv, das von einer anderen Person archiviert wird, und ich möchte nach dem Herunterladen automatisch einen Zweig des Dateisystems in den extrahierten Dateien ändern, um Lesezugriff zu erhalten. (Ich kann nicht ändern, wie das Archiv erstellt wird).
Ich habe mir diesen Thread angesehen: chmod: Wie man rekursiv Ausführungsberechtigungen nur zu Dateien hinzufügt, die bereits Ausführungsberechtigungen haben, wie in einigen anderen, aber keine Freude.
Die Verzeichnisse enthalten ursprünglich mehrere, aber alle falschen Flags. Sie können wie folgt aussehen:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
Dies sind nur die wenigen, die ich bisher entdeckt habe, aber es könnte auch mehr sein.
find
Fehler, wenn versucht wird, ein Verzeichnis ohne x
Berechtigung zu durchsuchen, und es daher nicht weitergibt chmod
. Was ich bisher getan habe, ist, die Berechtigungen für das übergeordnete Verzeichnis manuell zu ändern, dann in die untergeordneten Verzeichnisse zu wechseln und dasselbe für sie zu tun und so weiter. Aber das ist viel Handarbeit. Gibt es keine Möglichkeit, dies automatisch zu tun?
Dh wie ich es jetzt mache:
machen:
$ chmod -R +x
$ chmod -R +r
bis ich dann keine fehler bekomme
$ find -type f -exec chmod -x {} +
Aber es muss einen besseren Weg geben.
Antworten:
Sie benötigen zusätzlich zum Ausführen des Zugriffs Lesezugriff, um ein Verzeichnis aufzulisten. Wenn Sie nur Ausführungszugriff haben, können Sie die Namen der Einträge im Verzeichnis herausfinden, aber keine anderen Informationen (nicht einmal Typen, sodass Sie nicht wissen, welche der Einträge Unterverzeichnisse sind). Das funktioniert bei mir:
quelle
+
die Kommandozeile anders auf. Ich war mir dessen eigentlich nicht bewusst;\;
ist der übliche Weg, mit einem Befehl pro Datei, der der Suche entspricht."{}"
statt{}
sollte es beheben.Sie können chmod mit dem verwenden
X
Modusbuchstaben (dem Großbuchstaben X) verwenden, um das ausführbare Flag nur für Verzeichnisse zu setzen.Im folgenden Beispiel wird das ausführbare Flag gelöscht und dann rekursiv für alle Verzeichnisse gesetzt:
Ein bisschen Erklärung:
chmod -x foo
- Löschen Sie das eXecutable- Flag fürfoo
chmod +x foo
- Setzen Sie das eXecutable- Flag fürfoo
chmod go+x foo
- Wie oben, aber setzen Sie das Flag nur für Gruppen- und andere Benutzer. Berühren Sie den Benutzer nicht Berechtigung (Eigentümer)chmod go+X foo
- Wie oben, jedoch nur für Verzeichnisse gelten. Dateien nicht berührenchmod -R go+X foo
- wie oben, jedoch rekursiv für alle Unterverzeichnisse vonfoo
quelle
Versuchen Sie, alle Berechtigungen gleichzeitig zu ändern:
quelle
find -type f -exec chmod -x {} +
danach noch laufen .Um alles vom Eigentümer beschreibbar zu machen, lesen / ausführen Sie es von der Gruppe und die Welt ausführbar:
Um alles weit offen zu machen:
quelle
chmod -R 0777 .
Rekursives Hinzufügen ausführbarer Berechtigungen zu allen Dateien (nicht Ordnern) im aktuellen Ordner mit der
sh
Erweiterung:find . -name '*.sh' -type f | xargs chmod +x
* Beachten Sie die Pipe (
|
)quelle
Geben Sie 0777 für alle Dateien und Verzeichnisse ab dem aktuellen Pfad ein:
quelle