プレフィックスまたはサフィックスを追加してローカルフォルダのファイル名を変更する

プレフィックスまたはサフィックスを追加してローカルフォルダのファイル名を変更する

私のフォルダに多くのファイルがあり、プレフィックスまたはサフィックスを追加したいです(両方)与えてください。確認しましたここ使えることがわかりました

for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;

で終わるすべてのファイルにプレフィックスを追加します.jpg(削除すると、.jpg現在のフォルダ内のすべてのファイルにプレフィックスが追加されます)。

しかし、私はできることを願っています

  • サフィックスを追加します(例:filename.extに名前を変更するなどfilename.whatever.ext)。
  • プレフィックスまたはサフィックスがすでに存在していることを確認してスキップします。
  • addprefix whatever *.extまたは、同じパラメータを受け入れるエイリアスを作成します。addsufix whatever *.*

答え1

使用している場合は、bashこの1行のコードで操作を実行できます(変数があり、$prefix簡単に使用できる$suffixと仮定)。$extension

mv "$filename" "$prefix${filename%.$extension}$suffix.$extension"

スクリプトを作成できます

#!/bin/bash
# Usage: addprefix <prefix> <files>

prefix=$1
shift
for f in "$@"
do
  mv "$f" "$prefix$f"
done

そして

#!/bin/bash
# addsuffix <suffix> <files>

suffix=$1
shift
for f in "$@"
do
  extension=${f##*.}
  if [ -z $extension ]; then
    mv "$f" "$f$suffix"
  else
    mv "$f" "${f%.$extension}$suffix.$extension"
  fi
done

答え2

一つあるPerlrenameコマンドこれだけで十分です。しかし注意してください。というさまざまなコマンドがあるので、引数としてaを必要とするPerlスクリプトがrenameあることを確認してください。perlexprこれはDebianおよびその派生製品(Ubuntu、Mintなど)のパッケージによって提供されるコマンドですが、rename他のユーティリティ名を持つ可能性がある他のディストリビューションでは提供されません。perlrename

martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt

ご覧のとおりです。等級- 複数回呼び出してもプレフィックスは再追加されません。

文字列の(長さ0の)先頭(^)を置き換えるか、prefix開始部分の後にオプションの文字列を置き換える方法で機能しますprefix

私はこれを練習用にシェルスクリプトまたはシェル関数でパッケージ化します。 :)

しかし、Postfixは、ファイル名のどの部分が拡張子を構成しているかを知る必要があるため、少し難しいです。

答え3

そしてzsh

autoload zmv # in ~/.zshrc
zmv '(*~*suffix).ext' '${1}suffix.ext'

~ワイルドカードとは、次のことを意味します。とは別に存在するzsh

答え4

現在のフォルダにあるすべての画像のプレフィックスと拡張子を変更する簡単な例です。

prefix=EG_
extension=.jpg
for i in $(ls); do mv $i "$prefix${i%.JPG}$extension";  done

変更する前にデータにどのような影響があるかを確認するにはMV渡すエコ

IMG_7993.JPGの出力はEG_IMG_7993.jpgです。

関連情報