ファイルの名前を変更します。ワイルドカードの選択入力、出力にワイルドカード値を返そうとします。

ファイルの名前を変更します。ワイルドカードの選択入力、出力にワイルドカード値を返そうとします。

次のファイルセットがあります。

Q-30-09-1753.TIF
W-01-04-1753.TIF
W-31-12-1752.TIF
Y-14-12-1752.TIF

使用Windowsのgit bash以下のようにファイル名の末尾に文字を入れてファイル名を変更したいと思います。

30-09-1753-Q.TIF
01-04-1753-W.TIF
31-12-1752-W.TIF
14-12-1752-Y.TIF

次のコードを試してみました。

for f in *.TIF ; do 
    mv "$f" "${f//[A-Z]]\-[0-9][0-9]\-[0-9][0-9]\-[0-9][0-9][0-9][0-9]\-[A-Z]/}";
    echo "$f"
done

最初の部分では、変更するファイルを正常に選択しますが、名前を変更すると、ワイルドカードの選択はリテラルです。

答え1

怠けてそうかもしれませんがsed

newfilename=$(echo "${f}"|sed 's/\(.\)-\([^\.]*\)\.TIF/\2-\1.TIF/')
mv "${f}" "${newfilename}"

bashの素晴らしいですが、別の文字列を置き換える方法を学ぶ代わりに:)

ただし、日付の場合、日付形式はソートには役立ちません。 ISO日付形式に変更:YYYY-MM-DDを使用すると、日付に基づいてファイル名を正しくソートできます。 (そうでない場合は、日付に基づいて最初に並べ替えてから、月、秒、年に基づいて並べ替えます。)

newfilename=$(echo "${f}"|sed 's/\(.\)-\(..\)-\(..\)-\(....\)\.TIF/\4-\3-\2-\1.TIF/')

関連情報