2009-03-13 10 views
1

私はすべて同じディレクトリにあるいくつかのファイルの名前を変更したいと思います。使用されるファイル名パターンは、ヨーロッパの日付形式のPrefix_ddmmyy.texです。読みやすさと順序のために、標準的な日付形式のファイルPrefix_yymmdd.texでファイルの名前を変更したいと思います。シェルの日付ベースのファイルの名前を変更するにはどうすればいいですか?

私はこれを完全なディレクトリに対してどのように自動的に行うことができますか?私のsedとregexpの知識はそれほど鋭くはありません...

+0

私はいつも「アメリカの」日付形式と思いましたmmddyyだった。 – innaM

+0

はい、アメリカ人はmmddyyです.yymmdd(またはyyyymmdd)は正規のものです(他の形式とは異なり、実際には適切にソートされています)。 – vladr

+0

エラーを言い訳にしてください。私は標準的な変形を取るよりも。それに応じて編集。 – boutta

答えて

3

接頭辞_ * .tex;やる file_new = echo "$file" | sed -e 's:\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)\(\.tex\):\3\2\1\4:' テスト "$ファイル"!= "$ file_new" & & MV -f "$ファイル" "あなたはたくさんのファイルを持っている、および/またはしたい場合は、" は

かを、行って$ file_newプロセスはファイルを再帰的に置き換える:

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 
0

mmv」と入力してください。

1

ます。また、外部コマンドなしで任意のボーン型のシェルでそれを行うことができます。

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' 
+0

私はVladのソリューションを理解していますが、あなたのスクリプトが何をしているのか説明できます。私はさまざまな変数の束縛を理解していません。 – boutta

関連する問題