1

Кто-нибудь знает стандартный способ, кроме 'stat', для получения восьмеричного вывода для разрешения файла от 'ls'? Стандартный способ использования stat (в OSX):

stat -f '%A %a %N' *

где * может быть любым шаблоном файла, который вы обычно используете с ls .

Я подумываю о создании псевдонима на основе ls для краткого обозначения.

Есть ли другой / лучший способ сделать это?

2 ответа2

4

Не создавайте «LS- на основе» псевдоним. ls просто не делать то , что вы просите. Это работа stat .

Если вам не нравится команда stat , вы можете напрямую вызвать функцию stat() :

#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[]) {
    int i;
    struct stat st;
    for (i = 1; i < argc; i++) {
        if (stat(argv[i], &st) < 0)
            perror("stat");
        else
            printf("%06o %s\n", st.st_mode, argv[i]);
    }
    return 0;
}
#!/usr/bin/env perl
printf("%06o %s\n", (stat($_))[2], $_) for @ARGV
#!/usr/bin/env ruby
ARGV.each do |f|
    printf "%06o %s\n", File::stat(f).mode, f
end
#!/usr/bin/env python
import os, sys
for f in sys.argv[1:]:
    sys.stdout.write("%06o %s\n" % (os.stat(f).st_mode, f))
#!/usr/bin/env php
<?php
for ($i = 1; $i < $argc; $i++)
    printf("%06o %s\n", fileperms($argv[$i]), $argv[$i]);
#!/usr/bin/env tclsh
foreach file $argv {
    file stat $file st
    puts [format "%06o %s" $st(mode) $file]
}
2

Используйте stat вместо или вместе с ls. Вы можете изменить формат вывода статистики, если хотите выглядеть как вывод ls. Например:

find directory -maxdepth 1 -print0 | xargs -0 stat --format='%a %n'

Если вы хотите видеть его в точности как вывод ls, то это должен быть уже какой-то скрипт (awk, perl и т.д.). Его можно определить как функцию в вашей оболочке или сохранить как скрипт в некотором каталоге в вашей переменной PATH, и вы можете использовать это как замену команды ls. Это зависит от ваших потребностей, насколько это будет похоже на ls (обработка параметров командной строки и т.д.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .