-1

ファイルname.suffix.dateとして出力されているファイルの名前を変更するbashスクリプトの作成についてサポートが必要です。代わりに、これらのファイルをname.date.suffixとして書き換える必要があります。

編集:接尾辞を日付から〜に変更しましたこれまでのところ次のとおりです:

find . -type f -name "*.~" -print0 | while read -d $'\0' f
do
   new=`echo "$f" | sed -e "s/~//"`
   mv "$f" "$new"
done

これにより、サフィックスが元に戻りますが、拡張子の前に名前を付ける日付を取得する方法がわかりません(fname ??)

4

5 に答える 5

1

Bashのみのソリューション:

while IFS=. read -r -u 9 -d '' name suffix date tilde
do
    mv "${name}.${suffix}.${date}.~" "${name}.${date}.${suffix}"
done 9< <(find . -type f -name "*.~" -print0)

ノート:

  • -d ''と同じ結果が得られます-d $'\0'
  • 読み取り中にファイル名をドットで分割します。もちろん、これは他の場所にドットがあると壊れることを意味します。
  • それ以外の場合は、スペース、改行、その他の面白いビジネスを含むほとんどすべてのファイル名で機能するはずです。
于 2013-03-20T16:02:15.217 に答える
1

正規表現マッチングを使用して、元のファイル名を分解できます。

find . -type f -name "*.~" -print0 | while read -d $'\0' f
do
   dir=${f%/*}
   fname=${f##*/}
   [[ $fname =~ (.+)\.([^.]+)\.([^.]+)\.~$ ]] || continue
   name=${BASH_REMATCH[1]}
   suffix=${BASH_REMATCH[2]}
   d=${BASH_REMATCH[3]}

   mv "$f" "$dir/$name.$d.$suffix" 
done
于 2013-03-20T16:07:20.290 に答える
0
  1. 最初にファイルのリストを作成し、ファイルにリダイレクトします。ls> fileList.txt

  2. ファイルを開き、Perlで1行ずつ読み取ります。正規表現を使用してファイルの一部を照合し、次のようにキャプチャします

    my ($fileName,$suffix,$date)=($WholeFileName=~/(.*)\.(.*)\.(.*)/);

    これにより、3つの別々の変数がキャプチャされます。これで、古いファイルを新しいファイル名に移動するだけです。新しいファイル名は、取得した上記の3つの変数を連結したものになります。$ newFileName =$fileName。"。"。$date。"。"。$suffix。サンプルのfileNameがある場合は、コメントを投稿してください。短いスクリプトで返信できます。Perlが唯一の方法ではありません。bashまたはawkを使用して、これを行う別の方法を見つけることができます。

于 2013-03-20T15:38:26.090 に答える
0
  1. ファイル名の各部分を切り取ります。

    FIN=$(echo test.12345.ABCDEF | sed -e 's/[a-zA-Z0-9]*[\\.][a-zA-Z0-9]*[\\.]//')
    DEBUT=$(echo test.12345.ABCDEF | sed -e 's/[\\.][a-zA-Z0-9]*[\\.][a-zA-Z0-9]*//')
    MILIEU=$(echo test.12345.ABCDEF | sed -e 's/'${FIN}'//' -e 's/'${DEBUT}'//' -e 's/[\.]*//g')
    
  2. 期待どおりに各パーツを貼り付けます。

    echo ${DEBUT}.${FIN}.${MILIEU}
    
于 2013-03-20T15:47:29.127 に答える
0
rename --no-act 's/\(name-regex\).\(suffix-regex\).\(date-regex\)/\1.\3.\2' *

ファイル名に合うように3つの正規表現を微調整--no-actし、結果に満足したら削除して、実際にファイルの名前を変更します。

于 2013-03-20T15:58:09.920 に答える