есть ls -l числовое форматирование?

рассмотрим вывод этой команды ls -l:

$ ls -l /usr/bin | tail
-rwxr-xr-x 1 root root     105696 Oct 25  2014 zenity
-rwxr-xr-x 1 root root     188296 Oct 21  2013 zip
-rwxr-xr-x 1 root root      86096 Oct 21  2013 zipcloak
-rwxr-xr-x 1 root root      48459 Mar  3  2015 zipdetails
-rwxr-xr-x 1 root root       2953 Oct 29 10:45 zipgrep
-rwxr-xr-x 2 root root     166584 Oct 29 10:45 zipinfo

разрешения перечислены в симпатичных человекочитаемых символах. Есть ли способ получить ls для вывода числового эквивалента этих разрешений?

1
задан 10 November 2015 в 17:44

3 ответа

В соответствии с https://stackoverflow.com/questions/1795976/can-the-unix-list-command-ls-output-numerical-chmod-permissions это невозможно.

Ответ к этому вопросу, однако предлагает способ «почти» достичь этого:

ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
         *2^(8-i));if(k)printf("%0o ",k);print}'

Вы можете сделать это псевдонимом для удобства использования, но только один не может этого сделать.

4
ответ дан 23 May 2018 в 15:54

Вот забавный конвейер

paste <(printf "%04d\n" $(stat -c '%a' *)) <(ls -l | sed 1d) | 
  sed -r 's/([[:digit:]]+)\t(.)........./\2\1/' 
printf "%04d\n" $(stat -c '%a' *) - печатает нулевые права доступа на восьмеричный доступ для каждого файла ls -l | sed 1d - длинный список, минус первая строка «всего 12345», paste <(...) <(...) - берет одну строку из каждой подстановки процесса и соединяет их с вкладкой sed -r 's/([[:digit:]]+)\t(.)........./\2\1/' - заменяет читаемые разрешения rwxrwxrwx для человека с восьмеричным значением.
1
ответ дан 23 May 2018 в 15:54

Взгляните на поиск GNU:

find -printf "%y %m %n %u %g %Ac %f\n" -maxdepth 1

Смотрите: man find

1
ответ дан 23 May 2018 в 15:54

Другие вопросы по тегам:

Похожие вопросы: