名前の変更がまったく機能しないのはなぜですか?

名前の変更がまったく機能しないのはなぜですか?

複数のファイルの名前を変更する必要がありますが、一部のチュートリアルでは、各ファイルrenameに対してこのコマンドを使用するのではなく、このコマンドが最良のオプションであることを提案していますmv

しかし、次のファイルがあります。

 ReconhecimentoImagens2021-10-18--2020-2.mp4       ReconhecimentoImagens2021-11-01--2020-2.mp4   ReconhecimentoImagens2021-11-22--2020-2.mp4
 ReconhecimentoImagens2021-10-25--2020-2.mp4       ReconhecimentoImagens2021-11-08--2020-2.mp4   ReconhecimentoImagens2021-11-24--2020-2.mp4
'ReconhecimentoImagens2021-11-01--2020-2(2).mp4'   ReconhecimentoImagens2021-11-17--2020-2.mp4   ReconhecimentoImagens2021-11-29--2020-2.mp4

テストのために次のコマンドを試しました。

rename 's/2021/ /' *.mp4

何も起こりません。マンページによると、「名前変更なし」を意味するコード4が表示されます。

私はいくつかのチュートリアルを検索しましたが、誰も他のことをしないようです。それでは、ここで私が何を間違っているのでしょうか?

答え1

名前の変更にはさまざまなバージョンがあり、そのバージョンはPERL正規表現をサポートしていません。

rename.plほとんどのLinuxディストリビューションやその他のUnixoidシステムには、Perlまたは単純なコマンドで構築されたパッケージがあります。rename

あなたのユースケースでは、「クラシック」util-linuxでrename十分です。

rename "2021" " "  *.mp4

します。

正直なところ、私のシェルは、これらすべての驚くべきことを覚えておく必要がないほど十分に機能しています。一度学んで、sedある程度大丈夫でした。シェル構文を一度学んだforので、そうです。

for filename in *.mp4 ; do
  mv "${filename}" "$(echo "${filename}" | sed 's/regex/replacement/')"
done

少なくとも私にとっては覚えやすく、bash、zsh、その他のBourneなどのシェルで動作するはずです。私が学ぶべき追加のコマンドではありません。

実際に仕事を簡単にするためには、自分が好むシェルの変数拡張を最大限に活用できます。

#!/usr/bin/env zsh
if [[ "${#}" -lt 2 ]] ; then 
  echo "Usage: ${0} [-r] PATTERN REPLACEMENT [FILE...]"
  echo "Uses normal Zsh globbing for pattern, unless -r is specified:"
  echo "In that case, use the regexp-replace loadable ZSH function"
  exit 1
fi

if [[ "${1}" = "-r" ]]; then
  autoload regexp-replace
  REGEX=1
  shift 1
else
  set -o extendedglob
  REGEX=0
fi

PATTERN="${1}"
REPLACEMENT="${2}"
shift 2

if [[ "${REGEX}" -eq 0 ]]; then
  for filename in ${argv} ; do
    mv "${filename}" "${filename/${1}/${2}}" || echo "Problem renaming ${filename}" >&2
  done
else
  for filename in ${argv} ; do
    original_filename="${filename}
    regexp_replace filename "${PATTERN}" "${REPLACEMENT}"
    mv "${original_filename} "${filename}" || echo "Problem renaming ${original_filename}" >&2
  done
fi

関連情報