Solaris查找命令的打印选项

时间:2012-06-11 19:10:06

标签: shell unix scripting solaris

我在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 个答案:

答案 0 :(得分:1)

您可以使用Perl收集与查找-printf

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

答案 1 :(得分:0)

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

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

这是针对Solaris 10 sparc的索引 - 免费下载sunfreeware。如果您使用的是x86,则会进行相应的下载。您想下载并安装

findutils-4.4.2-sol10-sparc-local.gz

有一些依赖关系。否则你会面临写一些shell,C或perl来复制输出。

答案 2 :(得分:0)

你可以靠近-ls

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

但是,这将获得符号权限,而不是八进制权限。

答案 3 :(得分: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
}'