일치하는 ID 번호를 기반으로 파일을 폴더로 이동하는 Bash 스크립트?

일치하는 ID 번호를 기반으로 파일을 폴더로 이동하는 Bash 스크립트?

~/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}"후행 문자(+공백)를 제거한 다음 선행 문자(+공백)를 제거합니다. 이렇게 하면 변수의 숫자가 유지됩니다..jpgtarget="${target_part#Photo }"Phototarget

target그런 다음 파일을 의 숫자로 시작하는 디렉토리로 이동하면 됩니다 mv "$f" -t "${target} "*. 이는 각 숫자로 시작하는 파일 이름이 하나만 있고 디렉터리라고 가정합니다.

추가 정보

스크립트에 몇 가지 문제가 있습니다. 첫째, shebang이 잘못되었습니다. 오히려 !#그래야 합니다 #!.

둘째, 단지 오타인지는 모르겠지만 큰따옴표는 이어야 하고 ", 그렇지 않아야 합니다 .

*또한 매개변수 대체의 ${f%Photo*}이유나 $sub변수가 무엇을 참조하는지(할당되지 않았음) 잘 모르겠습니다 .

~/Desktop/a/*.jpg마지막으로, 더 쉬운 매개변수 대체를 위해 for 루프를 사용하는 것보다 루프로 직접 들어가는 것을 선호합니다 cd.

관련 정보