내가 데스크탑 디렉토리에 있고 이름이 .인 파일과 디렉토리의 수를 세고 싶다고 가정해 보겠습니다 exam
. 또한 문자열이 포함된 파일도 계산해야 합니다 exam
. 요약하자면 다음이 필요합니다.
- 이름으로 디렉토리 수 계산
exam
- 통계 파일 이름 및 내용
exam
지금까지 내가 시도한 것은 다음과 같습니다.
ls -l | grep -r "exam" | wc -l
하지만 이 명령은 내용이 있는 파일만 계산합니다 exam
. 여러 개의 디렉터리 ( , exam1
및 여러 .txt 파일 , , ) 가 있고 이를 세고 싶으면 어떻게 합니까 ?exam2
exam3
exam1.txt
exam2.txt
exam3.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
이 문자열이 출력됩니다. 그렇지 않은 경우, 해당 사물이 디렉터리가 아니고 그 내용에 다음이 포함되어 있는 경우단어 exam
file
를 누른 다음 문자열을 출력합니다. 최종 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"