
以下の形式で指定されたディレクトリのファイルを印刷するには、特別な要件があります。
filename1 <type of file> owner group
filename2 <type of file> owner group
$
列間の区切り文字はタブ文字です。
次のコマンドを書くことができましたが、system
コマンドの出力には避けたい新しい行が紹介されています。
find . -type f | xargs -I{} ls -let {} | awk -F" " 'BEGIN{OFS="\t" ORS=":"} {cmd=sprintf("file \"%s\"", $10);system(cmd);print $3,$4}'| tr -s ':\t ' '\t'
生成された出力は次のとおりです。
filename1 <type of file>
owner group filename2 <type of file>
owner group $
私はそのsystem
コマンドが私が避けたい新しい行を担当していることを知っています。同じ理由でORSを使用していますが、運がありません。
どんな助けでも大変感謝します。
答え1
コマンドでパイプI / Oを使用できますawk
(少なくともgawk
Solarisではテストされていません)。
find . -type f | xargs ls -l | awk 'BEGIN { OFS="\t" } { command=sprintf("file \"%s\"", $9); command | getline type; close(command); print type, $3, $4 }' | tr ":" "\t"
サポートすればfind
簡単にできます。
find . -type f -ls | awk ...
便利な点がありますリソースの使用getline
これには、やるべきこととやるべきことがたくさん含まれています(close()
もともと同じように使用しないものも含めて)。