Скрипт Bash для создания файла для каждого уникального разрешения в команде listing/find и вывода каждого экземпляра пути к каталогу/файлу этого разрешения

Скрипт Bash для создания файла для каждого уникального разрешения в команде listing/find и вывода каждого экземпляра пути к каталогу/файлу этого разрешения

Я пытаюсь создать скрипт 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.

Связанный контент