2011-02-14 5 views

답변

38

방법이 있습니다 :

find . -type f -name '*.*' | sed 's|.*\.||' | sort -u 
0

배시에게 4+

shopt -s globstar 
for file in **/*.* 
do 
    echo "${file##*.} 
done 

루비를 사용하는 경우 (1.9+)

ruby -e 'Dir["**/*.*"].each{|x|puts x.split(".")[-1]}' | sort -u 
0

아직 발견을 사용하여 다른 솔루션 (즉, 심지어해야 포함 된 줄 바꾸기가 포함 된 파일 확장명 정렬) :

# [^.]: exclude dotfiles 
find . -type f -name "[^.]*.*" -exec bash -c ' 
    printf "%s\000" "${@##*.}" 
' argv0 '{}' + | 
sort -uz | 
tr '\0' '\n' 
1
find . -type f | sed 's|.*\.||' | sort -u 

Mac에서도 작동합니다.

0

Boooom 다른 :

find * | awk -F . {'print $2'} | sort -u 
+0

'에코 'gniourf.tar.gz'나는 생각하지 않는다 중 하나를 확장하지 않고 파일을 포함 awk -F. { 'print $ 2'}'는'tar'와'echo 'one.two.three.pdf'를줍니다. awk -F. { 'print $ 2'}'는'two'를줍니다. 당신의 접근 방식이 좋은 것인가? –

+0

위의 해결책은 간단한 해결책이라고 생각합니다. 여기에 다른 것을 찾으십시오. -type f -name "*. *"| awk -F. '! [$ NF] ++ {print $ NF}'. 나는 간단한 명령으로 모든 유형의 파일을 얻을 수 없다고 생각합니다. 이전에 말했듯이, 모든 행을 파싱하는 데 문제가 있기 때문에이 경우에는 파이썬, 펄 또는 이와 유사한 문제가없는 일부 스크립트를 사용하는 것이 좋습니다. 어쨌든 나는 간단한 해결책을 제시했다. 만약 당신이 grep으로 필터링 할 수있는 파일의 확장자라면 | grep 'txt \ | png \ | pdf'. 감사합니다 – ackuser

0
ls -1 | sed 's/.*\.//' | sort -u 

업데이트 : 당신은 마태 복음 정확합니다. 내가 좋은 대답을 구글 검색했다대로 난 그냥 빨리이 시도되었다

ls -R1 | egrep -C 0 "[^\.]+\.[^\./:]+$" | sed 's/.*\.//' | sort -u

+1

이것은 두 가지 문제점이 있습니다. 먼저 플랫 디렉토리에서만 작동하지만 서브 디렉토리는 누락됩니다. 둘째, 출력에 확장자가없는 모든 파일을 포함합니다. – Matthew

+0

[ls'의 출력을 구문 분석하지 마십시오.] (http://mywiki.wooledge.org/ParsingLs), 특히 쓸모 없을 때. –

0

: 귀하의 의견을 바탕으로, 여기에 업데이트 된 버전입니다. Regex가 Bash보다 더 많은 경향이 있지만, 이것은 서브 디렉토리에도 적용됩니다. |

ls -R | egrep '(\.\w+)$' -o | sort | uniq -c | sort -r

+0

[ls'의 출력을 분석하지 마십시오.] (http://mywiki.wooledge.org/ParsingLs), 특히 쓸모 없을 때. –

관련 문제