Я пытаюсь создать скрипт bash, который сможет выполнить команду find для получения разрешений и полного пути каждого файла/каталога в дереве каталогов и создать файл для каждого уникального разрешения и вывести каждый полный путь файла к этому файлу разрешений. Затем в будущем я смогу читать эти файлы и использовать их для разрешений, которые были, когда я запускал скрипт.
Например:
drwxrwxrwx /home/user/testDirectory
-rwxrwxrwx /home/user/testDirectory/testFile
drwxr-xr-x /home/user/testDirectory/directory2
-rwxr-xr-x /home/user/testDirectory/directory2/test2
Вышеприведенный код создаст 2 файла (например, 777.txt
и 755.txt
), каждый из которых будет содержать 2 строки.
Я борюсь с логикой создания файла для каждого уникального разрешения, а затем отправки полного пути к файлу.
Что у меня есть на данный момент (сомневаюсь, что массив необходим, но я поигрался с сортировкой массива по разрешениям, что можно сделать с помощью -k 1.2 в команде sort, чтобы игнорировать флаг d):
declare -a PERMS
i=0
while read line
do
PERMS[$i]="$line"
(( i++ ))
done < <( find /opt/sas94 -printf ""%M/" "%p/"\n")
решение1
Попробуй это:
#!/bin/bash
while read file; do
stat -c '%A %n' "$file" >> $(stat -c '%a' "$file").txt
done < <(find "$1")
Использование:
./script.sh /path/to/directory
- первый
stat -c '%A %n' "$file"
выводит разрешения и путь к файлу, например-rw-rw-rw- /foo/bar
- второй
stat -c '%a' "$file"
выводит разрешения в восьмеричной форме, например666
Вывод первой функции stat
добавляется к имени файла, созданного второй функцией, stat
с суффиксом .txt
.