Wie gehe ich mit Dateinamen mit Leerzeichen um, wenn ich die Berechtigungen für bestimmte Dateien im aktuellen Verzeichnis und allen seinen Unterverzeichnissen ändere?

Wie gehe ich mit Dateinamen mit Leerzeichen um, wenn ich die Berechtigungen für bestimmte Dateien im aktuellen Verzeichnis und allen seinen Unterverzeichnissen ändere?

Ich versuche derzeit, alle Dateien mit Erweiterungen .htmlim aktuellen Verzeichnis und allen Unterverzeichnissen so einzustellen, dass sie von ihrem Besitzer gelesen , geschrieben und ausgeführt werden können und nur von Gruppen und anderen gelesen (nicht geschrieben oder ausgeführt) werden können. Einige der Dateien enthalten jedoch Leerzeichen im Namen, und ich bin mir nicht sicher, wie ich damit umgehen soll.

Mein erster Versuch:

chmod -Rv u+rw,go+r '* *.html'

Bei meinem ersten Versuch erhalte ich folgende Meldung:

chmod: cannot access '* *.html': No such file or directory
failed to change mode of '* *.html' from 0000 (---------) to 0000 (---------)

Mein zweiter Versuch:

find . -type f -name "* *.html" | chmod -Rv u+rw,go+r

Ich habe einen Pipe-Operator hinzugefügt, um die findAusgabe des Befehls an zu senden chmod. Bei meinem zweiten Versuch erhielt ich jedoch Folgendes:

chmod: missing operand after ‘u+rw,go+r’

Nach meinen Versuchen bin ich immer noch verwirrt, wie ich mit Leerzeichen in Dateinamen umgehen soll, um festgelegte Berechtigungen rekursiv zu ändern. Wie gehe ich am besten mit diesem Problem um? Jedes Feedback oder jeder Vorschlag ist willkommen.

Antwort1

Verwenden Sie das -execPrädikat von find:

find . -name '* *.html' -type f -exec chmod -v u+rw,go+r {} +

(Hier werden rw-r--r--nur Berechtigungen hinzugefügt, da es wenig Sinn macht, einer HTML-Datei Ausführungsberechtigungen hinzuzufügen, da diese im Allgemeinen nicht zur Ausführung gedacht sind. Ersetzen Sie +durch =toSatzdiese Berechtigungen genau stattHinzufügendiese Bits zu den aktuellen Berechtigungen).

Sie können auch ! -perm -u=rw,go=rvor dem ein hinzufügen -exec, um die Dateien zu überspringen, die bereits (mindestens) diese Berechtigungen haben.

Mit demsfindImplementierung vonfind(das ist auch das findeingebaute vondie boshMuschel) können Sie das -chmodPrädikat gefolgt von -chfile(das die Änderungen anwendet) verwenden:

sfind . -name '* *.html' -type f -chmod u+rw,go+r -chfile

! -perm...(dort ist es nicht nötig, „ as sfind“ hinzuzufügen, -chfileda dadurch die Dateien übersprungen werden, die bereits über die richtigen Berechtigungen verfügen).

Diese Methode ist am effizientesten, da nicht chmod für jede beliebige Anzahl von Dateien ein separater Befehl in einem neuen Prozess ausgeführt werden muss und auch, weil so vermieden wird, dass der vollständige Pfad jeder Datei zweimal nachgeschlagen werden muss ( sfindruft den chmod()Systemaufruf mit den Pfaden der Dateien relativ zu den Verzeichnissen auf sfind und findet sie beim Crawlen, d. h., chmod()es müssen nicht alle Pfadkomponenten, die zu ihnen führen, erneut nachgeschlagen werden).

Mit zsh:

chmod -v -- u+rw,go+r **/*' '*.html(D.)

Hier wird das rekursive Globbing der Shell und das Dund verwendet. Glob-Qualifikationum versteckte Dateien einzuschließen bzw. zu beschränken aufregulärDateien (wie -type f). Hinzufügen ^f[u+rw,go+r], um auch Dateien zu überspringen, die bereits diese Berechtigungen haben.

Sie können dafür keine chmod's in Kombination mit Globs verwenden. Globs werden von der Shell erweitert, nicht von abgeglichen , also übergeben Sie mit (beachten Sie, dass diese ohne Anführungszeichen bleiben müssen, damit die Shell sie als Globbing-Operatoren interpretiert) einfach eine Liste von Dateien an und nur wenn eine dieser Dateien ein Verzeichnis wäre, würde chmod rekursiv in sie eingreifen und die Berechtigungen aller Dateien darin ändern.-Rchmodchmod -Rv ... *' '*.html*htmlchmod

Antwort2

„Dateinamen mit Leerzeichen“ erfordert findund xargs. Lesen Sie man find xargsund führen Sie etwas aus wie:

find . -type f -name '*.html' -print0 | \
    xargs -0 -r echo chmod u=rwx,g=r,o

Entfernen Sie " echo", wenn es für Sie funktioniert.

verwandte Informationen