特定のサイズ以上のすべてのファイルを一覧表示するbashスクリプト

特定のサイズ以上のすべてのファイルを一覧表示するbashスクリプト

だから、次のコード行があります。

result=`find . -type f -size -1000c -print0 | xargs -0 ls -Sh | head`

for i in $result; do
    item=`wc -c $i`
    echo $item1 
done

現在のフォルダにあるすべてのファイルを最大1000バイトまで次の形式で印刷します。

ファイルサイズ。/ファイル名

ところで、「./」記号を取り除きたくて「cut」を使ってみました。

私は似たようなことをしたい:

for i in $result; do
    item=`wc -c $i`
    item1=`cut -f 1 $item`    // this gives me the size 
    item2=`cut -c 7- $item`   // this gives me all the character after ./ 
    echo item1, item2         // now make it print 
done

ただし、次のエラーが発生します。

cut: 639: No such file or directory

誰でも私にヒントを与えることができますか?ありがとうございます。

答え1

システムのPOSIXサポートによれば、これが達成したいのと同じ結果を提供すると信じています。

    find . -type f -size -1000c -printf '%P %s Bytes\n'

答え2

シノプシスを見てくださいcut(1):

cut OPTION... [FILE]...

最後の引数はファイル(またはファイルのリスト)になると予想されます。あなたがやっていることは、$item最後のパラメータを提供することだけです。$item639がエラーメッセージを説明しているようです。cutファイル名引数が必要なところに639を渡しています。これらの呼び出し$itemを。cut$i

ファイル名(マイナス記号)を抽出する最良の方法は、次を./使用することです。パラメータ拡張毎回固定数の文字に依存するのではなく、次のことを行います。

item2="${i#*./}"

答え3

この試み:

ls -l | awk '$5 <= 1000{print $5, $9}'

答え4

find . -type f -size -1000c -printf "%s %f\n"

%s ファイルサイズをバイト単位で印刷します。
%f すべての先行ディレクトリが削除されたファイル名を印刷します(最後の要素のみ)。

関連情報