![대상에 하위 디렉터리가 누락된 경우 'convert' 명령에 문제가 발생함](https://rvso.com/image/747352/%EB%8C%80%EC%83%81%EC%97%90%20%ED%95%98%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EA%B0%80%20%EB%88%84%EB%9D%BD%EB%90%9C%20%EA%B2%BD%EC%9A%B0%20'convert'%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A8.png)
src
하위 디렉토리와 기타 이미지로 가득 찬 디렉토리가 있습니다 . 하나의 bash 문을 사용하여 다음과 같이 호출되는 다른 대상 디렉터리에 맞게 자동으로 크기를 조정하려고 했습니다 thumb
.
find ./src -type f -follow -iname '*.jp*g' -exec convert -resize 150x150x "{}" "./thumb/${size}/{}" \;
디렉토리 thumb
가 처음에는 비어 있고 src
.
을 찾아보았지만 man convert
에 디렉토리를 자동으로 만드는 옵션을 찾을 수 없는 것 같습니다 convert
. 내 모든 이미지를 디렉토리의 썸네일 크기로 변환하는 효과적인 방법은 무엇입니까 thumb
? 모든 하위 디렉터리를 미리 만들어야 합니까?
편집하다
위의 명령 앞에 다음과 같이 했습니다.
find ./src -type d -follow -exec mkdir -p "thumb/${size}/{}" \;
그런데 두 명령이 아닌 하나의 명령으로 모든 것을 할 수 있을지 궁금합니다.
답변1
UNIX 철학은 한 가지 일만 수행하는 명령을 갖는 것입니다. 대신 파일에 쓸 수 있는 명령표준 출력이미 이 규칙을 확장하고 있습니다.
하나의 명령으로 모든 작업을 수행할 수 있는지 여부는 정의에 따라 다릅니다. 다음을 수행합니다.
find ./src -type f -follow -iname '*.jp*g' -exec /bin/sh -c \
'mkdir -p `dirname "thumb/'${size}'/{}"` &&'\
'convert -resize 150x150x "{}" "./thumb/'${size}'/{}' \;
하나 또는 여러 개의 명령으로 계산됩니다: find
, sh
, mkdir
, dirname
, convert
? 줄바꿈은 단지“가독성”.