特定の文字列を含むファイルとフォルダの数の計算

特定の文字列を含むファイルとフォルダの数の計算

私がデスクトップディレクトリにあり、名前が..のファイルとディレクトリの数を数えたいとしましょうexam。また、文字列を含むファイルも計算する必要がありますexam。要約すると、以下が必要です。

  1. 名前によるディレクトリ数の計算exam
  2. 統計ファイル名と内容exam

これまで私が試したことは次のとおりです。

ls -l | grep -r "exam" | wc -l 

ただし、このコマンドは内容のあるファイルのみを計算しますexam。複数のディレクトリ(、exam1および複数の.txtファイル、、、)があり、それらを数えたい場合はどうすればよいですか?exam2exam3exam1.txtexam2.txtexam3.txt

答え1

findディレクトリとディレクトリ以外の項目を異なる方法で処理するには、を使用してディレクトリとディレクトリ以外の項目の数をそれぞれ取得します。

find . -name '*exam*' \
    \( \(   -type d -exec echo directory \; \) -o \
    \(    ! -type d -exec grep -q -wF exam {} \; -exec echo file \; \) \) |
sort | uniq -c

名前に文字列を含む現在のディレクトリまたはその下のコンテンツを探しますexam。モノがディレクトリの場合、directoryこの文字列が出力されます。そうでない場合、そのものがディレクトリではなく、その内容に次のものが含まれている場合言葉 examfileを押してから文字列を出力します。最終sort合計は、uniq -c基準に一致するファイルとディレクトリをソートして計算します。

名前テストは、部分exam文字列を含む名前と一致させることができますexamplegrepファイルを使用すると、-wその可能性が高くなります。言葉部分文字列ではなく一致です。

答え2

私は次の2つのコマンドでそれをしました。

ディレクトリ数の計算

find  path -type d -iname "exam[0-9]" | wc -l

条件付きファイル数を数えるには、ファイルの内容を確認する必要があります。

find  path -type f -iname "exam[0-9]" -exec grep 'exam' {} \;|wc -l

答え3

この試み、

フォルダの場合:

 ls -lR * | awk -F '[ /]' ' !/^-/ && !/^d/{if ($NF ~ "exam" ) print $NF}' | wc -l

ファイルの場合:

 ls -lR * | awk  '/^-/ {if ($NF ~ "exam" ) print $NF}'  | wc -l

答え4

次のスクリプトは必要なものを達成します。

i=0
for file in *exam*
do
  if [ -d "$file" ] || [ -n "$(sed -n '/exam/{p;q}' -- "$file")" ]
  then
    i=$((i+1))
  fi
done
echo "Number of files: $i"

名前にが含まれているすべてのファイルを繰り返し、exam各ファイルのディレクトリか文字列が含まれていることを確認しますexam。その場合、スクリプトはカウンタを1ずつ増やします。

編集する:ご質問を誤解している可能性があります。ディレクトリとファイルを別々に計算したいです。その場合は、スクリプトを次のように修正してください。

i=0;j=0
for file in *exam*
do
  if [ -d "$file" ]; then
    i=$((i+1))
  elif [ -n "$(sed -n '/exam/{p;q}' -- "$file")" ]; then
    j=$((j+1))
  fi
done
echo "Number of directories: $i"
echo "Number of regular files: $j"

関連情報