指定されたディレクトリ内のファイル、ディレクトリなどの数を計算し、画面に出力形式を指定します。

指定されたディレクトリ内のファイル、ディレクトリなどの数を計算し、画面に出力形式を指定します。

スクリプト処理を始めたばかりで、助けが必要です。私は、指定されたディレクトリ内のすべてのファイルとディレクトリのファイル名を確認し、すべてのファイル、サブディレクトリ、シンボリックリンク、古いファイル、グラフィックファイル、tmpファイル、exeファイル、および各ファイルの数を累積するスクリプトを作成しています。このディレクトリのバイト数。

出力形式は次のように指定する必要があります。

  • ディレクトリn、nnn、nnn
  • ファイルn、nnn、nnn
  • など...

スクリプトを実行すると、すべてのカウント項目が0を返すため、何も計算されないようです。また、数値をカンマで書式設定する際にも問題があります。 $ 1は、スクリプトの実行時にユーザーが入力する検索ディレクトリです(例:./srpt /etc)。検索を実行するには、findコマンドとprintfを使用して出力形式を指定し、出力をwcにパイプして行数を計算しました。私はこれがファイル名に1行だけ与えるファイルの数を与えると思いました。これを行うには、おそらく何十億ものものがあり、この方法が最もエレガントではないかもしれませんが、誰にでもコメントしてください。

if [ -d "$1" ]; then
        directories=$(find "$1" -type d -printf "%'d" | wc -l)
        files=$(find "$1" -type f -printf "%'d" | wc -l)
        sym=$(find "$1" -type l -printf "%'d" | wc -l)

など...

#Printing the output to the terminal
      echo "Directories" $directories
      echo "Files" $files
      echo "Sym links" $sym
      exit 0
else
        echo "[ERROR]: need path to perform search"
        exit 1
fi

私の結果:

Directories 0
Files 0
Sym Links 0

答え1

コマンドを次の形式に変更する必要があります。

directories=$(printf "%'d\n" $(find "$1" -type f | wc -l))

printf現在のロケールの千単位の区切り記号を使用してください。区切り文字は、カンマ、ドット、または何でもない場合があります。カンマを強制するには、ロケールを変更できます。

または、次の方法で実行できます。

if [ -d "$1" ]; then
    directories=$(find "$1" -type d | wc -l)
    files=$(find "$1" -type f | wc -l)
    sym=$(find "$1" -type l | wc -l)

そしてechoに交換printf

#Printing the output to the terminal

  printf "%s %'d\n" "Directories" $directories
  printf "%s %'d\n" "Files" $files
  printf "%s %'d\n" "Sym links" $sym

printfこのエラーは、2つの異なるコマンド(bashとfind)を混同したために発生します-printf

ルックアップ-printf形式が"%'d"正しくありません。%dディレクトリツリーのファイルの深さを表す単一引用符は使用できません。次のように入力してすべての-printfオプションを見つけることができます。man find/printf format

しかし、両方とも(bashとfind)\nに追加する必要があります。それ以外の場合は、すべての出力を1行に印刷します。printf"%d\n"

答え2

-printf "%'d"ここでは何もしないので、カウント結果はゼロになり、それを変更するために使用する必要があります-printf "%p\n"

関連情報