exec 찾기 - {}를 출력 파일 이름으로 사용할 수 없는 이유는 무엇인가요? [복사]

exec 찾기 - {}를 출력 파일 이름으로 사용할 수 없는 이유는 무엇인가요? [복사]

이 명령을 사용하여 모든 하위 디렉터리의 모든 CSS 파일을 압축해 보았습니다.

find . -iname "*.css*" -exec gzip -c '{}' > '{}'.gz  \;

하지만 이는 {}.gz 파일만 생성합니다. 나는 이것을 사용하게되었습니다 :

find . -iname "*.css" -exec sh -c "gzip -c '{}' > '{}'.gz"  \;

좋은 결과.

문제는 첫 번째 것이 작동하지 않고 두 번째가 작동하는 이유입니다.

참고: 소스 파일을 보존하기 위해 gzip -k 스위치를 쉽게 사용할 수 있지만 CentOS 7의 gzip은 이를 지원하지 않습니다.

답변1

핵심은 명령이 해석되는 시기와 쉘에 따라 결정됩니다. 첫 번째에서는 명령줄 쉘이 >를 해석하여 find가 시작되기도 전에 로컬 파일을 생성합니다. 두 번째에서는 find가 {}를 대체한 후 서브셸이 이를 수행하므로 예상대로 작동합니다.

관련 정보