「検索」を使用せずにファイルサイズの下限と上限を表示

「検索」を使用せずにファイルサイズの下限と上限を表示

vimLinuxでというスクリプトを書く必要がありますbetween。このスクリプトは、ファイルサイズの下限と上限の2つのパラメータを使用してファイル名とサイズのリストを印刷します。ただし、このfindコマンドを使用してこのスクリプトを完了することはできません。

私はこれをしました:すべてのファイルを表示しますが、そうでない特定のファイルは表示できないようですfind

#!/bin/bash

for i in *
do
    set -- $(ls -l "$i")
    echo $i: $5 bytes
done

ベストアンサー1

あなたはできます:

  • 範囲を確認するには、次のifステートメントまたはcontinue操作を使用できます。

    if [[ $z -ge $1 || $z -le $2 ]]
    then
        : print result
    fi
    

    または

    [[ $z -lt $1 || $z -gt $2 ]] && continue
    : print result
    
  • 必要に応じてテストオプションは次のとおりです。

    • -ge:異常
    • -le:以下
    • -lt:未満
    • -gt:より良い
  • サイズを確認するにはstatduまたはを使用してください。ls後者の2つのケースでは、ターゲットがディレクトリか一般ファイルであるかを確認する必要があります。

    if [[ -f "$f" ]]
    then
        : a regular file
    fi
    

    または入れ子になった if を防ぐには、次の手順を実行します。

    ! [[ -f "$f" ]] && continue
    

    たとえば、ファイルサイズは次のようになります。

    z=$(stat -c%s "$f")
    z=$(du -b "$f" | cut -f1)
    z=$(ls -l "$f" | cut -d' ' -f5)
    
  • 結果を印刷するには、この機能を使用してprintfよりきれいな印刷を得ることができます。つまり、固定サイズなどまた、これをお読みください。

  • 本当に親切になりたい場合は、主張も検証してみてください。


#!/bin/bash

usage()
{
    printf "Usage: %s <min-size> <max-size>\n" "$0" >&2
    exit 1
}

! [[ "$1" =~ ^[0-9]+$ ]] && usage
! [[ "$2" =~ ^[0-9]+$ ]] && usage


for f in *
do
    z=$(stat -c%s "$f")

    # Alternatives to get size:
    # ! [[ -f "$f" ]] && continue
    # z=$(du -b "$f" | cut -f1)
    # z=$(ls -l "$f" | cut -d' ' -f5)

    if [[ $z -ge $1 || $z -le $2 ]]
    then
        printf "%11d %s\n" "$z" "$f"
    fi
done

おすすめ記事