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.txt
und 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 stat
wird an den vom zweiten erstellten Dateinamen stat
mit dem Suffix angehängt .txt
.