ディレクトリ内のファイル数がファイルの最初の行の数より大きい場合は「hello」と出力します

ディレクトリ内のファイル数がファイルの最初の行の数より大きい場合は「hello」と出力します

現在のディレクトリ内のファイル数がファイル チェックの最初の行で指定された数より大きい場合に hello を出力するコマンド ラインを記述します。

これは問題なく動作しますが、コマンド ラインを 1 つにしたいです。何かアイデアはありますか?

firstline=$(head -1 check)
allfiles=$(ls | wc -l)
echo $allfiles  $firstline

if (($allfiles > $firstline)); then
     echo "hello"
else 
     echo "oh no"
fi

答え1

次のワンライナーを使用できます:

files=( * ); [[ ${#files[@]} -gt $(head -1 check) ]] && echo 'hello' || echo 'oh no'

files配列には現在のディレクトリのファイルが含まれるため、${#files[@]}配列内の要素、つまり現在のディレクトリ内のファイルの数が表示されます。

check最初の行が数字であるファイルは によって抽出されますhead -1 check

展開された形式は次のとおりです。

check最後に、ファイル数が( )の最初の行の数より大きい場合は[[ ${#files[@]} -gt $(head -1 check) ]]helloが印刷されます。

展開された形式は次のとおりです。

#!/bin/bash
files=( * )
if [[ ${#files[@]} -gt $(head -1 check) ]]; then
    echo 'hello'
else
    echo 'oh no'
fi

関連情報