フォルダーに多くのファイルがあり、それらにプレフィックスまたはサフィックス(bothではない)を追加したい。私は ここ をチェックし、私が使用できることがわかりました
for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;
.jpg
で終わるすべてのファイルにプレフィックスを追加します(.jpg
を削除すると、現在のフォルダー内のすべてのファイルにプレフィックスが追加されます)。
しかし、私はできるようになりたいです
filename.ext
をfilename.whatever.ext
に名前変更します)。addprefix whatever *.ext
やaddsufix whatever *.*
などの引数を受け入れるエイリアスを作成しますbash
を使用している場合は、このワンライナーでそれを行うことができます(変数$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
Perl rename
command があります。ただし注意してください:rename
と呼ばれるいくつかの異なるコマンドがあるので、引数としてperlexpr
を期待するPerlスクリプトがあることを確認してください。これは、Debianおよび派生物(Ubuntu、Mintなど)のrename
パッケージによって提供されるPerl
コマンドですが、rename
と呼ばれる別のユーティリティを持つ他のディストリビューションでは提供されません。
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
ご覧のとおり、それは idempotent です。複数回呼び出しても、プレフィックスは再度追加されません。
文字列の(長さゼロ)の開始を置き換えることによって機能します(^
)または先頭にオプションのprefix
文字列が続き、prefix
。
演習として、これをシェルスクリプトまたはシェル関数のいずれかにカプセル化しておきます。
ただし、ファイル名のどの部分が拡張子を構成しているかを把握する必要があるため、Postfixは少し難しいです...
zsh
の場合:
autoload zmv # in ~/.zshrc
zmv '(*~*suffix).ext' '${1}suffix.ext'
~
は、zsh
の-exceptを意味するグロビング演算子です。
現在のフォルダー内のすべての画像のプレフィックスと拡張子を変更する簡単な例。
prefix=EG_
extension=.jpg
for i in $(ls); do mv $i "$prefix${i%.JPG}$extension"; done
変更する前にデータに与える影響を確認する場合は、mvをechoに置き換えてください。
iMG_7993.JPGの出力はEG_IMG_7993.jpgです