UNIX 기반 확장에서 다른 파일을 찾는 방법. vamsi.log-vamsi100.log, krishna.txt-krishna100.txt, super.csv..., rajat.jpeg..., kiran.xml-kiran100.xml 등 각각 100개의 파일이 있다고 가정합니다. 내 요구 사항은 명령을 실행하면 폴더에 얼마나 많은 패턴이 있는지만 알려주는 것입니다. 또한 각 확장에 대해 하나씩 제공해야 합니다. 이 목표를 어떻게 달성할 수 있나요?
ls -ltr
모든 파일이 제공됩니다. 그런데 폴더에 몇 가지 유형의 파일이 있는지 알아야 합니까?
답변1
강타 명령:for i in *; do echo "${i##*.}"; done | uniq -c
답변2
일방 통행:
find . -maxdepth 1 -type f | sort -u -t. -k3 | wc -l
설명하다:
find . -maxdepth 1 -type f
: 현재 디렉토리의 모든 일반 파일을 찾습니다.sort -u -t. -k3
: 필드 구분 기호를 사용하여 필드의 출력을 정렬하고 동일한 줄의3
첫 번째 줄만 인쇄합니다..
wc -l
: 행 수를 계산합니다.
편집하다
zsh
쉘을 사용하는 경우 다음을 실행할 수 있습니다
echo ${(u)$(echo *(:e))} | wc -w
결과는 아마도 사례보다 나을 것입니다 . 해당 시간부터 이름이 시작되는 파일에도 관심이 find
있다면 최소한 다중 지점 파일이 올바르게 고려됩니다..
echo ${(u)$(echo {.,}*(:e))} | wc -w
답변3
나는 간단한 접근 방식이 ls *.extension
트릭을 수행할 것이라고 생각합니다 :)
그것들을 계산하려면 다음을 사용할 수 있습니다.ls *.extension -1 | wc -l
답변4
find . -maxdepth 1 -type f | awk -F. '{print $NF}' | sort | uniq -c
awk
마지막 항목 .
("확장") 이후의 항목을 잡는 데 사용됩니다.
sort
각 "확장자"의 모든 항목을 그룹화합니다.
uniq -c
라인/확장자 당 중복 수를 표시합니다.