Geben Sie Dateien Benutzerberechtigungen

Geben Sie Dateien Benutzerberechtigungen

Es fällt mir schwer, dieses Problem zu lösen.

Schreiben Sie ein Shell-Skript, um die Ausführungsrechte für alle Dateien im aktuellen Verzeichnis zu überprüfen. Wenn die Datei nicht über die Ausführungsrechte des Benutzers verfügt, machen Sie sie benutzerausführbar.

Ich dachte daran, eine Schleife über alle Dateien im aktuellen Verzeichnis auszuführen und die Ausgabe in eine Textdatei zu schreiben. Anschließend lese ich das vierte Zeichen jeder Zeile und prüfe, ob es „x“ oder „-“ ist.

Antwort1

Ihre Idee scheint plausibel, aber unnötig umfangreich und komplex. Sie können stattdessen Folgendes verwenden:

#!/bin/bash
for file in *; do
    [[ -x $file ]] || chmod u+x "$file"
done
  • Dies liest alle Dateien ( *) im aktuellen Verzeichnis

  • Anschließend wird geprüft, ob die Datei vom Benutzer, der das Skript ausführt, ausführbar ist ( [[ -x $file ]])

  • Wenn nicht ( ||), wird die Datei für den Benutzer ausführbar gemacht ( chmod u+x "$file").

Standardmäßig *werden keine versteckten Dateien abgeglichen. Um versteckte Dateien abzugleichen, fügen Sie außerdem die Zeile hinzu

shopt -s dotglob

nach der Shebang-Zeile.

Wenn Sie nur normale Dateien suchen und bearbeiten möchten:

#!/bin/bash
for file in *; do
    if [[ -f $file ]]; then
        [[ -x $file ]] || chmod u+x "$file"
    fi
done

Antwort2

Es ist ein einfacher findBefehl mit chmod:

find . -type f ! -perm -u+x -exec chmod u+x {} \;

oder nur für den aktuellen Ordner:

find . -maxdepth 1 -type f ! -perm -u+x -exec chmod u+x {} \;

Erläuterung

  • .

    Starten Sie die Suche im aktuellen Ordner

  • -maxdepth

    Nicht rekursiv

  • -type f

    Nur Dateien, keine Ordner

  • ! -perm -u+x

    Nur Dateien ohne das ausführbare Flag für den Eigentümer der Datei

  • -exec chmod u+x {}

    Setzen Sie das ausführbare Flag für den Besitzer der Datei

Antwort3

Ich wünschte, Sie hätten erwähnt, ob es Teil eines größeren Automatisierungsprojekts ist oder einfach etwas, das Sie tun möchten.

Sie können in einem Verzeichnis einfach Folgendes tun:

chmod u+x *

Dies verleiht allen Dateien in einem Ordner den Status „Ausführbar“ für „Ihr Benutzer". Sie können versuchen, es für " hinzuzufügen.alle" von

chmod a+x *

Beachten Sie, dass Ihr Benutzer die Berechtigung haben sollte, Dateien in diesem bestimmten Ordner zu ändern. Das bedeutet, dass Sie über 'schreiben'-Berechtigung. Andernfalls können Sie nichts ändern. Wenn Ihr Benutzer Administrator ist, können Sie ihn mit dem folgenden sudoBefehl aufrufen:

sudo chmod a+x *

Wenn eine Datei bereits den Status „Ausführbar“ hat, kann es nicht schaden, ihr diesen Status erneut zu geben. Natürlich, wie gesagt, es sei denn, Sie möchten den Namen aller Dateien, deren Status geändert wurde, für einen anderen Zweck verwenden, z. B. zum Melden. Das Skript von heemayl ist für solche Zwecke eine nette Sache.


Hinzugefügt von Mostafa Najafiyazdi Kommentare

[..] Wenn er die Berechtigungen von Ordnern nicht ändern möchte, die keine Ausführungsberechtigung haben, sollte er chmod u+x *[..] nicht verwenden.

verwandte Informationen