私はこれを試しました:
#!/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
add_suffixが古いファイルの名前であるこのコマンドで
sh add_suffix
しかし、エラーが発生します。
add_suffix: 5: shift: can't shift that many
何が問題なの?
ベストアンサー1
私はシェルスクリプトで何が間違っているのかについての記事の最後の質問ではなく、スレッドの質問に答えています。
シェルスクリプトの外部でこれを行う場合は、mmvコマンドを使用してください。
me@elman:~/test$ ls
file1 file1.out file2
me@elman:~/test$ mmv -n "*" "#1.newsuffix"
file1 -> file1.newsuffix
file1.out -> file1.out.newsuffix
file2 -> file2.newsuffix
'-n'はmmvに実行するアクションを示しますが、実際には実行しないように指示します(模擬実行)。 2番目のパラメータ( "*")は、mmvに変更するファイル(ソース)を知らせます。より複雑な一致パターンがあるかもしれませんが、このコマンドはディレクトリから隠されていないすべてのファイルをインポートする必要があります。最後のパラメータ「#1.newsuffix」(ターゲット)では、#1はソース仕様の最初のワイルドカード一致を参照し、それを新しい名前にコピーします。
実際に変更するには、「-n」を削除します。マニュアルページはとても素晴らしいです。