
여러 .rgb
파일을 s로 변환해야 합니다 .png
(각 파일은 원래 이름을 유지해야 함).
첫 번째 파일을 변환한 다음 명령을 'for' 루프로 래핑하는 방법을 알고 싶습니다.
이것이 내가 지금까지 가지고 있는 것입니다:
find . -name "*.rgb" | sort | sed -n \1\p | xargs convert zzzzz.png
그러나 이것은 작동하지 않습니다.
convert
두 번째 인수를 인식하는 명령을 어떻게 만들 수 있습니까 zzzzz.png
?
답변1
디렉토리 트리의 모든 파일을 변환하려면 다음을 실행합니다.
find . -name '*.rgb' | parallel convert {} {.}.png
이는 병렬로 실행됩니다.
convert ./foo.rgb ./foo.png
convert ./bar/quux.rgb ./bar/quux.png
여기에서는 GNU Parallel을 사용하여 모든 CPU를 활용합니다. 시스템에 따라 패키지로 설치할 수 있습니다. 그렇지 않으면 여기에 있습니다.gnu.org/software/parallel. 데비안에서는 다음과 같습니다:
apt-get install parallel
편집:
다음은 없는 솔루션입니다 GNU Parallel
.
find . -name '*.rgb' -exec sh -c 'convert "$0" "${0%.*}.png"' {} \;
다음을 사용하는 그다지 좋지 않은 솔루션은 다음과 같습니다 while..read
.
find . -name '*.rgb' | while read FILE; do convert "${FILE}" "${FILE%rgb}png" ; done
답변2
내가 사용하는 단일 디렉토리의 모든 이미지를 변환(내 경우에는 크기 조정)하려면
ls *.jpg | xargs -I {} convert {} -resize 1024x768 resized/{}
파일 이름에 대한 중괄호 자리 표시자를 두 번 사용할 수 있는 방법에 유의하세요. 대상 파일 이름에 접두사를 추가하여 사용할 수도 있습니다.
재귀 검색의 경우:
find -name '*.jpg' | xargs -I {} convert {} -resize 1024x768 resized/{}
답변3
나는 답을 찾았습니다:
for i in 'seq 1 $numOfRGBfiles'; do
#Insert code here that finds the file
#name of each rgb file and stores it
#in $filename.
'find . -name "*.rgb" | sort | sed -n
\$i\p | xargs -I {} convert {}
\$filename.png'
done