이름이 두 자리 숫자로 끝나는 디렉토리의 파일 수를 표시하는 Linux 명령은 무엇입니까?

이름이 두 자리 숫자로 끝나는 디렉토리의 파일 수를 표시하는 Linux 명령은 무엇입니까?

Linux에서 디렉토리에 두 자리 숫자로 끝나는 파일 이름이 몇 개 있는지 표시하는 명령은 무엇입니까? ls다음과 같은 명령을 사용하십시오 .

ls -l | wc –l  *[0-9][0-9]

답변1

Bash에서 다음 작업은 비재귀적입니다. 물론 함수에 넣을 수도 있습니다.

shopt -q nullglob || restore=1 && shopt -s nullglob
var=(*[0-9][0-9])
echo ${#var[@]}
[ 1 -eq "$restore" ] && shopt -u nullglob

이는 이상한 파일 이름이 있는 경우에도 작동합니다. 파일 이름이 이상하지 않다면 다음 ls접근 방식을 사용할 수 있습니다.

ls -d1b *[0-9][0-9] | wc -l

이전에 사용했던 플래그는 ls달랐습니다. -d내용이 아닌 디렉토리를 나열합니다( something00예를 들어 이름이 지정된 디렉토리가 있는 경우). 즉, 파일 이름을 -1탈출하기 위해 단일 열을 사용한다는 뜻입니다. -b파일 이름은 작동합니다. .

something00이들 둘 다 개수에 지정된 디렉터리를 포함합니다. 파일이나 재귀만 필요한 경우 find이것이 바로 당신이 찾고 있는 것입니다. 이는 현재 디렉토리( .)를 재귀적으로 검색하여 파일( )만 찾습니다 -type f.

find . -type f -name '*[0-9][0-9]' -printf 'f\n' | wc -l

를 사용하면 -printf문자만 인쇄 f되고 파일 이름은 인쇄되지 않습니다. 미친 파일 이름으로부터 보호할 수 있도록 파일 수를 세고 싶을 뿐입니다.

답변2

필요하지 않은 경우 다음 명령을 wc -l사용할 수 있습니다 .tree

tree -P "*[0-9][0-9]" foldername/

시험

내 폴더 중 하나에 두 자리 숫자로 끝나는 파일 3개를 만들었습니다.

먼저 ls를 실행하여 모든 파일을 봅니다.

bash-3.2$ ls
1aga21  abcd  kshexp.ksh  new.txt  temp  temp1  temp12  temp2  temp3  temp34

이제 tree 명령을 사용하여 폴더의 한 수준 위로 이동합니다.

그 후 tree다음 명령을 내립니다.

bash-3.2$ tree -P "*[0-9][0-9]" jun4th/
jun4th/
|-- 1aga21
|-- temp12
`-- temp34

0 directories, 3 files

보시다시피 마지막 행에는 기준과 일치하는 총 파일 수가 나열됩니다. 이것-피명령 플래그는 tree모드를 지정합니다.

편집하다

derobert가 지적했듯이, 2개의 숫자로 끝나는 디렉토리가 있고 해당 디렉토리에 2개의 숫자로 끝나는 여러 파일이 포함되어 있는 경우 tree 명령은 모든 파일을 생성하여 더 노이즈가 많은 출력을 생성합니다. 원래 명령을 아래와 같이 조정하면 이를 방지할 수 있습니다.

tree -P "*[0-9][0-9]" -L 1 jun4th/

이 플래그를 참고하세요 -L 1. 이는 파일이 현재 디렉터리의 한 하위 수준에서만 발견된다는 의미입니다.

답변3

Perl이 마음에 들지 않는다면:

perl -E '@a=<*[0-9][0-9]>;say scalar @a'

이것은 (지금까지 제안된 다른 모든 솔루션과 마찬가지로) 이름이 2로 끝나는 파일 수를 계산한다고 가정합니다.이상숫자. 파일 foo123도 계산됩니다.

이것이 원하는 것이 아니라면 다음 Perl은 모든 개수를 인쇄합니다.문서(파일 및 디렉터리와는 반대로) 이름이 두 자리 숫자로 끝납니다.

perl -E 'say scalar grep { -f && /[^0-9][0-9]{2}\z/ } <*>'

답변4

이식 가능한 접근 방식은 다음과 같습니다 find.

find ././ ! -type d -name '*[0-9][0-9]' | grep -c '^\./\./'

그리고 쉘 기능은 다음과 같습니다.

set -- ./*[0-9][0-9]
for f do
    [ -e "$f" ] && echo
done | wc -l

ls파일 이름 끝에 2자리 숫자만 있는 파일을 재귀적이고 이식 가능하게 계산하고 일치시키려면 다음을 수행하십시오.

ls ./ -aR1iqp |
grep -c '^ *[0-9].*[^0-9][0-9][0-9]$' 

현재 디렉토리만 검색하려면:

ls ./.* ./* -ad1iqp |
grep -c '^ *[0-9].*[^0-9][0-9][0-9]$'

관련 정보