~/Desktop/a/에는 다음 패턴의 파일과 폴더가 있습니다.
500 photodir
Photo 500.jpg
1000 origindir
Photo 1000.jpg
.jpg를 해당 폴더로 이동하고 ID로 숫자를 태그하고 싶습니다.
500 photodir/Photo 500.jpg
1000 origindir/Photo 1000.jpg
지금까지의 코드는 다음과 같습니다.
!#/bin/bash/
for f in ~/Desktop/a/*.jpg
do
base=“${f%Photo*}”
mv "$f" "$base/"
mv "$sub/$f"* "$base/$sub/"
done
답변1
#!/bin/bash
cd ~/Desktop/a/
for f in *.jpg; do
target_part="${f%.jpg}"
target="${target_part#Photo }"
mv "$f" -t "${target} "*
done
설명하다
거기 두 개 있어매개변수 대체여기서 일어났습니다. 먼저 파일 이름에서 target_part="${f%.jpg}"
후행 문자(+공백)를 제거한 다음 선행 문자(+공백)를 제거합니다. 이렇게 하면 변수의 숫자가 유지됩니다..jpg
target="${target_part#Photo }"
Photo
target
target
그런 다음 파일을 의 숫자로 시작하는 디렉토리로 이동하면 됩니다 mv "$f" -t "${target} "*
. 이는 각 숫자로 시작하는 파일 이름이 하나만 있고 디렉터리라고 가정합니다.
추가 정보
스크립트에 몇 가지 문제가 있습니다. 첫째, shebang이 잘못되었습니다. 오히려 !#
그래야 합니다 #!
.
둘째, 단지 오타인지는 모르겠지만 큰따옴표는 이어야 하고 "
, 그렇지 않아야 합니다 “
.
*
또한 매개변수 대체의 ${f%Photo*}
이유나 $sub
변수가 무엇을 참조하는지(할당되지 않았음) 잘 모르겠습니다 .
~/Desktop/a/*.jpg
마지막으로, 더 쉬운 매개변수 대체를 위해 for 루프를 사용하는 것보다 루프로 직접 들어가는 것을 선호합니다 cd
.