![exec 찾기 - {}를 출력 파일 이름으로 사용할 수 없는 이유는 무엇인가요? [복사]](https://linux55.com/image/156773/exec%20%EC%B0%BE%EA%B8%B0%20-%20%7B%7D%EB%A5%BC%20%EC%B6%9C%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%97%86%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
이 명령을 사용하여 모든 하위 디렉터리의 모든 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가 {}를 대체한 후 서브셸이 이를 수행하므로 예상대로 작동합니다.