ファイル名から文字とスペースの最後の文字の組み合わせを削除する方法

ファイル名から文字とスペースの最後の文字の組み合わせを削除する方法

端末では、ファイル名の末尾にスペースと数字の組み合わせを含むフォルダ内のすべてのファイル名を変更してみました。ファイル名の末尾にはスペースと数字の組み合わせ(例: "12334")が含まれており、.mp3の前にある数字とスペースの両方を削除する必要があります。

たとえば、

  • filename 1234567.mp3
  • my file 123.mp3
  • your file 98.mp3

名前変更:

  • filename.mp3
  • my file.mp3
  • your file.mp3

答え1

強く打つ

$ touch 'filename 1234567.mp3' 'my file 123.mp3' 'your file 98.mp3' 1234.mp3 zzz.mp3

$ for f in *.mp3; do
    g=${f%%[[:space:]]+([[:digit:]]).mp3}
    if [[ $f != $g ]]; then
        mv -v -- "$f" "$g.mp3"
    fi
done
renamed 'filename 1234567.mp3' -> 'filename.mp3'
renamed 'my file 123.mp3' -> 'my file.mp3'
renamed 'your file 98.mp3' -> 'your file.mp3'

$ ls
1234.mp3   filename.mp3  'my file.mp3'  'your file.mp3'   zzz.mp3

これはbashを使用します延長する模様ファイル名の末尾の空白と1つ以上の数字、その後に「.mp3」が続くものと一致させます。

答え2

そしてzsh

まず、関数を自動ロード済みとしてマークします(頻繁にzmv使用したい場合は最適です)。~/.zshrc

autoload -Uz zmv

それから:

zmv -n '(**/)(*)( *)(.mp3)' '$1$2$4'

満足すれば削除-n(テスト実行)します。

最後のスペースの後の部分が一連の10進数の場合にのみファイル名を変更してください。

zmv -n '(**/)(*)( <->)(.mp3)' '$1$2$4'

(またはその範囲の数字を<98-1234567>変更してください<->)。

(**/)すべてのレベルのサブディレクトリと一致します。現在のディレクトリのファイル名のみを変更するには、次の手順を実行します。

zmv -n '(*)( *)(.mp3)' '$1$3'

関連情報