ファイル内のアルファベットと数字以外の文字を何も付けずに名前を変更する

ファイル内のアルファベットと数字以外の文字を何も付けずに名前を変更する

フォルダー内に、などのアルファベット以外の文字を含む .jpg ファイルが多数あります! , ( ) ^ & .

ファイル名を変更して、何もないものがA-Z a-z 0-9何もないものに置き換えられるようにする必要があります。また、スペースもファイルに置き換えられ、-.mp4$$$.jpg で終わる必要があります。この部分はそのままにしておく必要があります。

例えば、ファイルが

ask me anything.mp4001.jpg
ask, me. anything! 2.mp4001.jpg

ファイル名は次のように変更する必要があります

ask-me-anything.mp4001.jpg
ask-me-anything-2.mp4001.jpg

答え1

bash では、次のように実行できます。

for f in *.jpg
do
  if [[ $f =~ ^(.*)(\.mp[[:digit:]]+\.jpg) ]]
  then
    prefix=${BASH_REMATCH[1]}
    suffix=${BASH_REMATCH[2]}
    prefix=${prefix//[^[:alnum:] ]/}
    prefix=${prefix// /-}
    echo mv -- "$f" "${prefix}${suffix}"
  fi
done

これはファイルをループし*.jpg、各ファイル名をパターン (任意の.mp文字) に続いて (1 つ以上の数字)と照合します.jpg。ファイル名が一致すると、名前を変更するために切り離されます。サフィックスにはピリオドが含まれているため、プレフィックスのピリオドを削除するために別々に保存します。英数字またはスペース以外の文字を削除した後、すべてのスペースをダッシュ​​に置き換えます。その後、ファイル名がコマンド用に再構築されます。結果が正しい場合は をmv削除します。echo

元のファイル名にダッシュを残しておきたい場合は、最後の 2 つのprefix割り当てを次のように置き換えます。

prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}

関連情報