1

我在 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上不起作用)

4

4 回答 4

1

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

find . -print | perl -lne '$,=" "; @s=stat $_; print $_, $s[2], $s[7]'
于 2012-06-11T22:20:59.920 回答
0

这应该适用于任何 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
}'
于 2012-06-12T14:25:38.383 回答
0

如果不编写大量代码,真的没有简单的方法可以复制它。

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

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

findutils-4.4.2-sol10-sparc-local.gz

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

于 2012-06-11T20:54:57.423 回答
0

You can get close with -ls:

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

However, that will get you the symbolic permissions, not the octal perms.

于 2012-06-11T21:03:22.947 回答