
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]$'