파일 확장자를 인쇄하려면 find에서 -exec를 사용하세요.

파일 확장자를 인쇄하려면 find에서 -exec를 사용하세요.

나는 -execfind 명령의 플래그를 가지고 놀고 있습니다. 나는 상당히 새로운 Linux 배포판을 사용하여 파일 확장자를 인쇄하기 위해 이 플래그를 사용하려고 합니다.

간단하게 시작하면 다음과 같이 작동합니다.

find . -type f -exec echo {} \;

편리한 Bash 문자열 함수를 사용하려는 시도가 실패했습니다.

find . -type f -exec echo "${{}##*.}" \; (bad substitution)

그렇다면 올바른 접근 방식은 무엇입니까?

답변1

쉘 매개변수 확장을 사용하려면 다음을 사용하여 일부 쉘을 실행하십시오 exec.

find . -type f -exec sh -c 'echo "${0##*.}"' {} \;

답변2

 find . -type f | while read file; do echo "${file##*.}"; done

누구도 기억할 수 없는 까다로운 exec 구문을 모두 우회할 수 있다는 장점이 있습니다.

또한 발견된 각 파일에 대해 하나의 하위 프로세스를 생성하고 삭제하는 대신 하나의 하위 프로세스만 생성할 수 있다는 이점도 있습니다. 이것은 exec를 사용하는 jimmij 버전보다 훨씬 빠릅니다.

# Preparation - 1000 files
for i in {1..1000}; do touch $i.$i; done

>time find . -type f -exec sh -c 'echo "${0##*.}"' {} \;
real    0m21.906s
user    0m6.013s
sys     0m12.304s


>time find . -type f | while read file; do echo "${file##*.}"; done
real    0m0.219s
user    0m0.125s
sys     0m0.087s

관련 정보