获取“ls”以八进制生成文件权限的简单标准命令行方式是什么?

获取“ls”以八进制生成文件权限的简单标准命令行方式是什么?

除了使用 'stat' 生成 'ls' 文件权限的八进制输出外,还有人知道其他标准方法吗?使用 stat 的标准方法(在 OSX 上)是:

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

其中 * 可以是通常使用的任何文件模式ls

我正在考虑创建一个ls基本的别名以用于速记。

还有其他/更好的方法可以做到这一点吗?

答案1

不是创建一个“基于 ls”的别名。ls只需不做你要什么。这是 的工作stat

如果你不喜欢该stat命令,你可以stat()直接调用该函数:

#包括 <stdio.h>
#包括 <sys/stat.h>
int main(int argc, char *argv[]) {
    int 我;
    结构统计 st;
    对于(i = 1;i < argc;i++){
        如果 (stat(argv[i],&st) < 0)
            perror(“统计”);
        别的
            printf("%06o %s\n", st.st_mode,argv[i]);
    }
    返回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", 文件::stat(f).mode, f
结尾
#!/usr/bin/env python
导入操作系统、系统
对于 sys.argv[1:] 中的 f:
    sys.stdout.write("%06o %s\n" % (os.stat(f).st_mode, f))
#!/usr/bin/环境 php
<?php
对于 ($i = 1; $i < $argc; $i++)
    printf("%06o %s\n", fileperms($argv[$i]), $argv[$i]);
/usr/bin/env tclsh 复制代码
foreach 文件 $argv {
    文件状态 $file st
    放入 [格式 “%06o %s” $st(模式)$文件]
}

答案2

使用统计代替或与ls。如果您希望看起来像 ls 输出,则可以更改 stat 输出格式。例如:

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

如果您希望看到它与 ls 输出完全相同,那么它应该已经是某个脚本了(awk、perl 等)。它可以在您的 shell 中定义为一个函数,也可以保存为 PATH 中某个目录中的脚本,您可以将其用作 ls 命令的替代品。它与 ls 的相似程度取决于您的需求(命令行选项处理等)

相关内容