回答:
bashを使用するだけで、外部コマンドを呼び出す必要はありません。
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
追加しないでください #!/bin/sh
そのワンライナーを必要とする人のために:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
ますか?このステートメントを使用して、または使用せずに両方を試してみました。
#!/bin/bash
。つまり、bashは通常多くのコンピューターのデフォルトシェルなので、多くの違いは見つかりません:D詳細はこちら
rename
コマンドを試してください:
rename 's/_h.png/_half.png/' *.png
更新:
使用例:
コンテンツを作成する
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
テストソリューション:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
何ですか?rename ...
あなたは何を試しますか?
rename
は標準のUnixツールではありません。
brew install rename
's//'
-私は男性を参照しrename [options] expression replacement file...
、簡単な概要がありました:、CentOS 7、バージョン:rename from util-linux 2.23.2
.
、リテラルのドットのための使用を-任意の文字だけではなく、ドットと一致する\.
代わりに
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnew
てecho $fnew
、出力が正常に見えるようにしています。
純粋なbashソリューションをお探しですか?多くのアプローチがありますが、ここに1つあります。
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
これは、現在のディレクトリで終わるファイルだけ_h.png
が、名前を変更するファイルであることを前提としています。
より具体的に
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
これらの2つの例を想定するのはあなただけです。ファイル。
rename
perlで作成されたユーティリティを使用します。デフォルトでは利用できないかもしれませんが...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
が、応答セットが完了すると、私は別の行方不明1を追加する必要があります。
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done