mogrify를 어떻게 실행하지만 파일 이름 앞에 접두사를 사용할 수 있습니까? 같습니다 /covers 0788862281217.jpg 0788863155104.jpg 7888311516341.jpg 7888370920479.jpg 7888497074277.jpg 파일 이름과 같은 접두사 th_ 를 사용

같은 디렉토리에 300k + jpg 파일이 있습니다. 파일은 다음과 같습니다

/covers
0788862281217.jpg
0788863155104.jpg
7888311516341.jpg
7888370920479.jpg
7888497074277.jpg

파일 이름과 같은 접두사 th_ 를 사용 하여 동일한 디렉토리 에 크기가 조정 된 이미지를 저장하여 일괄 크기를 조정해야합니다.

th_0788862281217.jpg
th_0788863155104.jpg
th_7888311516341.jpg
th_7888370920479.jpg
th_7888497074277.jpg

모든 내부 /covers

다음은 작동하지만 소스 파일을 덮어 씁니다.

$ find thumbs -type f -name "*.jpg" | xargs mogrify -resize 75x75

그래서 모든 이미지를 새 디렉토리 (/ covers / thumbs)에 복사 한 다음 배치를 실행 한 다음 모든 파일을 다시 / covers로 이동해야합니다



답변

매뉴얼에서 :

Mogrify는 원본 이미지 파일을 덮어 쓰지만 convert (1)은 다른 이미지 파일에 씁니다.

넌 할 수있어:

find ./covers -type f -name '*.jpg' -execdir convert {} -resize 75x75 th_{} \;

파일 수가 많은 경우 가장 효율적일 것입니다.

일반적으로, 여러 가지 이유로 그것을 파이프에 오히려 나쁜 생각의 출력 findxargs, 당신은 GNU와 BSD는 다음과 같은 패턴을 사용하지 않는 한 find지원 변형을 :find … -print0 | xargs -0 …


쉘 전용 명령을 사용하려면 다음과 같이 파일을 반복하십시오.

for image in ./covers/*.jpg; do convert "$image" -resize 75x75 "$(dirname $image)/th_$(basename $image)"; done

외부 명령에 의존하지 않고도 얻을 수있는 가장 쉽고 안전한 방법입니다. 그러나 경로와 파일 이름을 나누고 그 사이에 접두사를 삽입해야합니다. 이미 같은 폴더에 있다면 훨씬 쉽습니다.

for i in *.jpg; do convert "$i" -resize 75x75 "th_$i"; done

Zsh를 사용한 보편적이고 짧은 솔루션 :

for i (./covers/*.jpg) convert "$i" -resize 75x75 "${i:h}/th_${i:t}"


답변