【问题标题】:Solaris find command's print optionsSolaris find 命令的打印选项
【发布时间】:2012-06-14 17:04:32
【问题描述】:

我在cygwin上运行以下命令

$ find . -printf "%p %m %s \n" | sort -n

输出如下...

./.metadata/.log 700 17247
./.metadata/.mylyn 700 0
./.metadata/.mylyn/repositories.xml.zip 700 423
./.metadata/.mylyn/tasks.xml.zip 700 250
./.metadata/.plugins/com.google.appengine.eclipse.core/appengine-sdk-proxy.jar 700 8782

(要求的格式是八进制的文件名/权限/字节大小)

我想知道如何在 Solaris 上创建类似的输出。 (上面的命令在solaris上不起作用)

【问题讨论】:

    标签: shell unix scripting solaris


    【解决方案1】:

    这应该适用于任何 Unix / Unix 之类的操作系统,即不需要 gnu find、perl 或类似的:

    PATH=`getconf PATH`
    LC_ALL=C find . -exec ls -dils {} + | awk '
    function parse(s,level)
    {
        p=0;
        r=substr(s, 1 ,1)
        w=substr(s, 2 ,1)
        x=substr(s, 3 ,1)
        if(r=="r") p+=4;
        if(w=="w") p+=2;
        if(x=="x") p+=1;
        if(x!="-" && x!="x") { p+=1; xtra+=level }
        return(p)
    }
    function s2n(s)
    {
        xtra=0
        owner=parse(substr(s, 2 , 3), 4)
        group=parse(substr(s, 5 , 3), 2)
        other=parse(substr(s, 8 , 3), 1)
        return(0+(xtra*1000)+(owner*100)+(group*10)+other);
    }
    {
        perm=s2n($3);
        size=$7
        $1=$2=$3=$4=$5=$6=$7=$8=$9=$10=""
        sub("^ *","")
        print $0 " " perm " " size
    }'
    

    【讨论】:

    • find on Solaris 可能没有-exec 选项的+ 终止符。
    • @glenn jackman :实际上不是。虽然在 Solaris 9 之前没有记录,但这个 + 终止符从几十年前的第一个 Solaris 2 版本开始就可用了。
    【解决方案2】:

    您可以使用 Perl 收集与 find 的 -printf 相同的信息:

    find . -print | perl -lne '$,=" "; @s=stat $_; print $_, $s[2], $s[7]'
    

    【讨论】:

    • 万一文件名包含换行符,这将丢失该文件。没有人应该使用那样的文件名,很多其他的东西也可能会破坏,但这是合法的。
    【解决方案3】:

    你可以和-ls亲密接触:

    $ find . -ls | awk '{print $11 " " $3 " " $7 }'
    

    但是,这将为您提供符号权限,而不是八进制权限。

    【讨论】:

    • 如果文件名包含空格,$11 将不包含完整的文件名。
    【解决方案4】:

    真的没有简单的方法可以在不编写大量代码的情况下复制它。

    http://www.sunfreeware.com/indexsparc10.html
    

    这是用于 Solaris 10 的 sparc 的索引 - 从 sunfreeware 免费下载。如果您使用的是 x86,则有相应的下载。你要下载安装

    findutils-4.4.2-sol10-sparc-local.gz
    

    有一些与之相关的依赖项。否则,您将面临编写大量 shell、C 或 perl 来复制输出的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多