ls
許可ビットの出力を8進数に変換したいと思います。
私はこの練習を実装する最も短くて明確な方法を考えました。入力があるとします。
total 1
drwxr----x 1 user2 workers 1024 May 26 22:22 dir
-rwx-wxrw- 2 user2 workers 1024 May 26 22:22 file.txt
私たちの結果は次のとおりです。
741 dir
736 file.txt
答え1
GNUを使用できますfind
。
find . -type f -printf "%m\t%f\n"
ファイルのフルパスを取得するには、p
代わりにディレクティブを使用してくださいf
。
find . -type f -printf "%m\t%p\n"
結果を現在のディレクトリに制限するには、次のように指定します-maxdepth
。
find . -maxdepth 1 -type f -printf "%m\t%f\n"
ファイルとディレクトリの結果が必要な場合は、-type
述語を削除してください。
find . -printf "%m\t%p\n"
答え2
あなたはこれを使いたくありませんls
。 GNUシステムでは、次のものを使用できます。
stat -c'%a %n' *
答え3
これは最も明確なコードではありませんが、出力を通して理解するのは簡単です。
echo drwxr----x |
awk '{chars=substr($1,2); print chars; gsub("-","0",chars);
gsub("r","4",chars); gsub("w","2",chars); gsub("x","1",chars);
print chars; for(i=1;i<10;i++) { sum+=substr(chars,i,1);
if (i%3 == 0) { printf "%d",sum;sum=0; }; } print ""; }'
rwxr----x
421400001
741
(ここでは最初の9つの権限のみが設定されているとします。)