Bash-Skript zum Erstellen einer Datei für jede eindeutige Berechtigung in einem Listing-/Find-Befehl und Drucken jeder Verzeichnis-/Dateipfadinstanz dieser Berechtigung

Bash-Skript zum Erstellen einer Datei für jede eindeutige Berechtigung in einem Listing-/Find-Befehl und Drucken jeder Verzeichnis-/Dateipfadinstanz dieser Berechtigung

Ich versuche, ein Bash-Skript zu erstellen, das einen Suchbefehl ausführen kann, um die Berechtigungen und den vollständigen Pfad jeder Datei/jedes Verzeichnisses in einem Verzeichnisbaum abzurufen, eine Datei für jede einzelne Berechtigung zu erstellen und jeden vollständigen Dateipfad in diese Berechtigungsdatei zu drucken. Dann könnte ich diese Dateien in Zukunft lesen und sie verwenden, um die Berechtigungen so wiederherzustellen, wie sie waren, als ich das Skript ausgeführt habe.

Zum Beispiel:

drwxrwxrwx /home/user/testDirectory  
-rwxrwxrwx /home/user/testDirectory/testFile  
drwxr-xr-x /home/user/testDirectory/directory2  
-rwxr-xr-x /home/user/testDirectory/directory2/test2 

Das Obige würde zwei Dateien erstellen (z. B. 777.txtund 755.txt), die jeweils zwei dieser Zeilen enthalten würden.

Ich habe Probleme mit der Logik, für jede einzelne Berechtigung eine Datei zu erstellen und dann den vollständigen Dateipfad zu senden.

Was ich bisher habe (ich bezweifle, dass das Array notwendig ist, aber ich habe mit dem Sortieren des Arrays nach Berechtigung herumgespielt, was ich mit -k 1.2 im Sortierbefehl tun kann, um das Flag d zu ignorieren):

declare -a PERMS

i=0

while read line
do
     PERMS[$i]="$line"
     (( i++ ))
done < <( find /opt/sas94 -printf ""%M/" "%p/"\n")

Antwort1

Versuche dies:

#!/bin/bash

while read file; do
        stat -c '%A %n' "$file" >> $(stat -c '%a' "$file").txt
done < <(find "$1")

Verwendung:

./script.sh /path/to/directory
  • Der erste stat -c '%A %n' "$file"gibt die Berechtigungen und den Pfad zur Datei aus, z. B.-rw-rw-rw- /foo/bar
  • Der zweite stat -c '%a' "$file"gibt die Berechtigungen in Oktalform aus, z. B.666

Die Ausgabe des ersten statwird an den vom zweiten erstellten Dateinamen statmit dem Suffix angehängt .txt.

verwandte Informationen