
다음과 같은 디렉토리 구조에 원본 이미지가 있습니다.
./Alabama/1.jpg
./Alabama/2.jpg
./Alabama/3.jpg
./Alaska/1.jpg
...the rest of the states...
원본 이미지를 모두 썸네일로 변환하여 웹사이트에 표시하고 싶었습니다. 약간의 조사/실험 끝에 다음 Linux 명령을 생각해냈습니다.
find . -type f -iname '*.jpg' | sed -e 's/\.jpg$//' | xargs -I Y convert Y.jpg -thumbnail x100\> Y-small.jpg
내 하위 디렉터리에서 모든 jpg 이미지를 재귀적으로 찾아 나중에 이름을 바꿀 수 있도록 파일 형식(.jpg)을 제거한 다음 썸네일로 만들고 파일 형식 앞에 '-small'을 추가하여 이름을 바꿉니다.
그것은 내 목적에는 효과가 있었지만 약간 복잡하고 그다지 강력하지 않습니다. 예를 들어, 파일 이름 시작 부분에 'small-'을 어떻게 삽입할지 잘 모르겠습니다(예: ./Alabama/small-1.jpg).
질문:
- 여러 하위 디렉터리에 있는 이미지에서 축소판을 만드는 더 좋고 강력한 방법이 있습니까?
- 기존 명령을 더 강력하게 만들 수 있습니까(예를 들어, 출력된 썸네일을 저장하기 전에 sed를 사용하여 이름을 바꾸는 경우 - 기본적으로 Y-small.jpg 부분 수정).
답변1
항상 자신의 위치보다 한 수준 아래에 있는 디렉터리인 경우 다음과 같이 루프를 시도해 볼 수 있습니다.
for dir in *; do
[ ! -d "$dir" ] && continue; # skip non-directory entries, i.e. additional files
cd "$dir"
for file in *.jpg; do
convert -thumbnail x100 "$file" "small-${file}" # creates e.g. small-1.jpg
done
done