저는 쉘스크립트를 처음 사용하는데 필요한 작업을 수행하는 데 몇 가지 문제가 있습니다.
내 모든 *.png 이미지를 '최적화'하고 싶고 찾았습니다.이것그래서 나는 다음과 같이 bash를 만들었습니다.
#!/bin/bash
pngnq -vf -s1 *.png
rename -nq8.png .png *-nq8*
optipng -o7 *.png
이것이 하는 일은:
pngnq -vf -s1 *.png
Image.png 예제의 *png를 가져와서 최적화된 Image-nq8.png라는 이름의 복사본을 생성합니다.rename -nq8.png .png *-nq8*
Image-nq8.png를 Image.png로 만들어 이전과 동일하지만 최적화합니다(그래서 최적화하기 전과 동일한 폴더를 가질 수 있습니다) <= 매우 중요합니다!optipng -o7 *.png
복사본을 만들지 않고 Images.png에 또 다른 최적화를 수행합니다.
하지만 이제 문제가 생겼습니다.
콘솔에 모든 줄을 순서대로 쓰면 현재 폴더에서는 제대로 작동하지만 이제는 자동으로 재귀적으로 수행해야 합니다. 나는 내 사건을 설명합니다:
참고: 저는 폴더를 디렉토리라고 말합니다.
ImagesFolder라는 폴더가 있고 그 안에 *.png가 더 많은 다른 폴더가 있고 ImagesFolder의 모든 하위 폴더에서 이 bash를 실행하고 싶지만 어떻게 해야 할지 모르겠습니다. 쉘스크립트 등) 그리고 제가 인터넷에서 찾아 시도한 것은 작동하지 않거나 완전히 엉망이었습니다...
내가 가진 것을 더 잘 이해하려면 다음과 같습니다.
ImagesFolder
|-Folder1
| |- Folder12
| | |-20 images here
| |- Folder13
| | |- 10 images more here
| |- _Folder <- I have some folder names that start with '_'
| |- 5 images here
|-more images and folders and subfoldrs
이것이 구조이며 스크립트가 ImagesFolder에서 실행되기를 원합니다.
나는 for와 find를 사용해 보았고, 스크립트를 호출하는 콘솔에서 find를 사용해 보았습니다. 여기 스택에서 찾은 몇 가지 예제를 너무 적용해 보았지만 아무 것도 없었습니다... 아마도 실제로 어떻게 되는지 모르기 때문일 것입니다. 이 작품은 그렇게 적용할 수가 없어요. 이 문제를 해결하는 데 도움이 되길 바랍니다.
매우 감사합니다!
편집: 스크립트를 실행하려면 ImageFolder로 이동하여 콘솔을 열고 chmod u+x name_of_my_script
하위 폴더로 실행하는 데 문제가 될 수 있습니까? 그렇다면 문제를 해결하는 방법을 알려주실 수 있나요?
답변1
Bash 스크립트:
새 파일을 만들고 find_and_rename
다음 줄을 추가합니다.
버전
replace
#!/bin/bash shopt -s globstar for f in **/*png; do pngnq -vf -s1 "$f" # Uncomment the line below for a test run # rename -v -n 's/^(.*)\-nq8(.*)/$1$2/' "$f" # Comment the line below out for a test run rename -v 's/^(.*)\-nq8(.*)/$1$2/' "$f" optipng -o7 "$f" done
버전
mv
#!/bin/bash shopt -s globstar for f in **/*png; do pngnq -vf -s1 "$f" # Uncomment the line below for a test run # echo "$f => ${f//-nq8/}" # Comment the line below out for a test run mv "$f" "${f//-nq8/}" optipng -o7 "$f" done
다음을 사용하여 파일을 실행 가능하게 만듭니다.
chmod +x find_and_rename
폴더로 이동합니다 ImagesFolder
.
이 폴더의 스크립트를 시작하십시오.
<path_to_script>/find_and_rename
예( pngnq
및 없음optipng
$ find . -type f -name "*.png"
./Image-nq8.png
./sub/Image-nq8.png
./Image2-nq8.png
$ ./find_and_rename
Image2-nq8.png renamed as Image2.png
Image-nq8.png renamed as Image.png
sub/Image-nq8.png renamed as sub/Image.png
$ find . -type f -name "*.png"
./Image2.png
./sub/Image.png
./Image.png