.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