2012-06-11 65 views
1

我在Cygwin上的Solaris找到

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

回答

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來複制輸出。

0

你可以用-ls親近:

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

然而,這將讓你符號權限,而不是八進制燙髮。

+0

如果文件名包含空格,$ 11'將不包含完整的文件名。 –

0

這應該在任何Unix /類Unix操作系統中使用,即不要求GNU發現,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 
}' 
+0

Solaris上的'find'可能沒有'-exec'選項的'+'終止符。 –

+0

@glenn jackman:其實不是。雖然在Solaris 9之前沒有記錄,但自從幾年前的第一個Solaris 2發行版以來,該+終結器已經可用。 – jlliagre