ディレクトリ名に基づいてファイル名を変更する

ディレクトリ名に基づいてファイル名を変更する

フォルダ名に基づいて複数のフォルダの.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)。ただ確認して中断します。

おすすめ記事