특정 문자열을 포함하는 파일 및 폴더 수 계산

특정 문자열을 포함하는 파일 및 폴더 수 계산

내가 데스크탑 디렉토리에 있고 이름이 .인 파일과 디렉토리의 수를 세고 싶다고 가정해 보겠습니다 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하위 문자열을 포함하는 이름 과 일치할 수 있습니다 example. grep파일을 사용하면 -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"

관련 정보