mogrify를 어떻게 실행하지만 파일 이름 앞에 접두사를 사용할 수 있습니까?


3

같은 디렉토리에 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로 이동해야합니다

답변:


7

매뉴얼에서 :

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}"    

안녕! 내 파일은 / thumbs 폴더가 아니라 / covers에 있습니다. 따라서 커맨드 라인이 다음과 같이 가정합니다. "$ image"-resize 75x75 "th _ $ (basename $ image)"; 완료 마스터 파일과 동일한 디렉토리에 저장됩니까? 옳은? Tnx!
Gabriele

샘플 디렉토리 / 파일로 시도했습니다. 작동하지 않음
Gabriele

죄송합니다. 폴더가 잘못되었습니다. 최신 업데이트를 참조하십시오. 명령이 임의의 폴더로 작업 할 경우에, 당신은 사이의 경로를 분할해야 dirname하고 basename거기에 접두사를 삽입합니다. 이미 폴더에 있다면 다음이 더 쉬울 것 for i in *.jpg; do convert "$i" -resize 75x75 "th_$i"; done입니다..
slhck

3 개의 이미지를 사용한 테스트는 성공적이었습니다. 300K + 파일로 기본 디렉토리에서 실행하고 여기로 돌아갑니다. 고마워요 slhck!
Gabriele

1
당신의 인수 목록이 너무 오래 (때문에 300K + 파일) 끝나는 경우 사용하여 변형 시도 findexecdir나는 위의 내 대답에 추가 된합니다.
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.