すべて同じディレクトリにあるいくつかのファイルの名前を変更したいと思います。使用されるファイル名のパターンはPrefix_ddmmyy.tex
、ヨーロッパの日付形式です。Prefix_yymmdd.tex
読みやすさと順序のために、正規の日付形式のパターンでファイルの名前を変更したいと思います。
完全なディレクトリに対してこれを自動的に行う方法を考えている人はいますか? 私のsedとregexpの知識はあまり鋭くない...
Prefix_*.tex のファイルの場合。do file_new= echo "$file" | sed -e 's:\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)\(\.tex\):\3\2\1\4:'
test "$file" != "$file_new" && mv -f "$file" "$file_new" done
または、多数のファイルがある場合、および/またはファイルを再帰的に処理する場合は、次のように置き換えます。
for file in Prefix_*.tex ; do
と:
find . -name Prefix_*.tex -print | while read file ; do
または (非再帰、GNU):
find . -maxtdepth 1 -name Prefix_*.tex -print | while read file ; do
外部コマンドなしで任意の bourne タイプのシェルで実行することもできます。
for f in *.tex; do
_s=.${f##*.} _f=${f%.*} _p=${f%_*}_
_dt=${_f#$_p} _d=${_dt%????} _m=${_dt%??}
_y=${_dt#$_m} _m=${_m#??}
mv -- "$f" "$_p$_y$_m$_d$_s"
done
zshの場合は次のようになります。
autoload -U zmv
zmv '(*_)(??)(??)(??)(.tex)' '$1$4$3$2$5'
「 mmv 」を試すことができます。