디렉터리 이름을 기준으로 파일 이름 바꾸기

디렉터리 이름을 기준으로 파일 이름 바꾸기

폴더 이름을 기반으로 여러 폴더의 .jpg 파일 이름을 바꾸는 방법은 무엇입니까? 또한 .jpg파일을 이동하지 않고 해당 폴더에 유지하고 싶습니다 . 폴더 이름에는 공백이 없습니다.

예를 들어 폴더 이름이 Red인 경우 생성된 파일 이름은 다음과 같습니다.

Red000001.jpg
Red000002.jpg
Red000003.jpg

다음 명령이 있지만 바람직하지 않은 결과가 발생하여 이름이 바뀐 파일을 해당 폴더 외부로 이동하고 파일 이름을 "엉성"하게 만듭니다.

start=$PWD;
for directory in *; do
  cd "$directory";
  for filename in *; do
    mv "$filename" ../"Folder $directory - $filename";
  done;
  cd "$start";
done

답변1

cd여러 디렉터리에 들어가고 나가야 하는 경우 이를 사용하여 cd -마지막 현재 작업 디렉터리로 이동합니다. 또는 pushd/ popd(에서 )를 사용합니다 bash.

for directory in *; do
  pushd "$directory"
  index=1
  for filename in *; do
    extension="${filename##*.}"
    if [ "$filename" != "$extension" ]; then
      extension=".$extension"
    else
      # i.e. there is no dot in the file name
      extension=""
    fi
    target_filename="${directory}$(printf "%06d" "$index")${extension}"
    if [ -f "$target_filename" ]; then
      echo "File ${target_filename} exists; aborting."
      exit 3
    fi
    mv "$filename" "${target_filename}"
    ((index++))
  done
  popd
done

이 코드는 이름 충돌을 잘 처리하지 못합니다(이미 파일이 있는 경우 Red00004). 단지 확인하고 중단합니다.

관련 정보