디렉토리 (하위 디렉토리 포함)의 모든 파일 확장자를 반환하는 데 사용할 수있는 명령 또는 명령 모음은 무엇입니까?디렉토리에서 모든 파일 확장자를 재귀 적으로 찾는 방법은 무엇입니까?
지금은 ls
과 grep
의 다른 조합을 사용하고 있지만 확장 가능한 솔루션을 찾을 수 없습니다.
디렉토리 (하위 디렉토리 포함)의 모든 파일 확장자를 반환하는 데 사용할 수있는 명령 또는 명령 모음은 무엇입니까?디렉토리에서 모든 파일 확장자를 재귀 적으로 찾는 방법은 무엇입니까?
지금은 ls
과 grep
의 다른 조합을 사용하고 있지만 확장 가능한 솔루션을 찾을 수 없습니다.
방법이 있습니다 :
find . -type f -name '*.*' | sed 's|.*\.||' | sort -u
배시에게 4+
shopt -s globstar
for file in **/*.*
do
echo "${file##*.}
done
루비를 사용하는 경우 (1.9+)
ruby -e 'Dir["**/*.*"].each{|x|puts x.split(".")[-1]}' | sort -u
아직 발견을 사용하여 다른 솔루션 (즉, 심지어해야 포함 된 줄 바꾸기가 포함 된 파일 확장명 정렬) :
# [^.]: exclude dotfiles
find . -type f -name "[^.]*.*" -exec bash -c '
printf "%s\000" "${@##*.}"
' argv0 '{}' + |
sort -uz |
tr '\0' '\n'
find . -type f | sed 's|.*\.||' | sort -u
Mac에서도 작동합니다.
Boooom 다른 :
find * | awk -F . {'print $2'} | sort -u
ls -1 | sed 's/.*\.//' | sort -u
업데이트 : 당신은 마태 복음 정확합니다. 내가 좋은 대답을 구글 검색했다대로 난 그냥 빨리이 시도되었다
ls -R1 | egrep -C 0 "[^\.]+\.[^\./:]+$" | sed 's/.*\.//' | sort -u
이것은 두 가지 문제점이 있습니다. 먼저 플랫 디렉토리에서만 작동하지만 서브 디렉토리는 누락됩니다. 둘째, 출력에 확장자가없는 모든 파일을 포함합니다. – Matthew
[ls'의 출력을 구문 분석하지 마십시오.] (http://mywiki.wooledge.org/ParsingLs), 특히 쓸모 없을 때. –
: 귀하의 의견을 바탕으로, 여기에 업데이트 된 버전입니다. Regex가 Bash보다 더 많은 경향이 있지만, 이것은 서브 디렉토리에도 적용됩니다. |
ls -R | egrep '(\.\w+)$' -o | sort | uniq -c | sort -r
[ls'의 출력을 분석하지 마십시오.] (http://mywiki.wooledge.org/ParsingLs), 특히 쓸모 없을 때. –
'에코 'gniourf.tar.gz'나는 생각하지 않는다 중 하나를 확장하지 않고 파일을 포함 awk -F. { 'print $ 2'}'는'tar'와'echo 'one.two.three.pdf'를줍니다. awk -F. { 'print $ 2'}'는'two'를줍니다. 당신의 접근 방식이 좋은 것인가? –
위의 해결책은 간단한 해결책이라고 생각합니다. 여기에 다른 것을 찾으십시오. -type f -name "*. *"| awk -F. '! [$ NF] ++ {print $ NF}'. 나는 간단한 명령으로 모든 유형의 파일을 얻을 수 없다고 생각합니다. 이전에 말했듯이, 모든 행을 파싱하는 데 문제가 있기 때문에이 경우에는 파이썬, 펄 또는 이와 유사한 문제가없는 일부 스크립트를 사용하는 것이 좋습니다. 어쨌든 나는 간단한 해결책을 제시했다. 만약 당신이 grep으로 필터링 할 수있는 파일의 확장자라면 | grep 'txt \ | png \ | pdf'. 감사합니다 – ackuser