5

ディレクトリ内のいくつかのファイルをコピーして、ファイルの名前を変更しますが、拡張子は保持します。cpこれは、正規表現を使用した単純な方法で可能ですか?

例えば ​​:

cp ^myfile\.(.*) mydir/newname.$1

そのため、拡張子を保持したままファイルの名前を変更してコピーすることができます。cpコマンドで使用するために正規表現で一致する要素を取得する方法はありますか?そうでない場合は、私が思うperlスクリプトを実行します。または、別の方法がある場合は...

ありがとう

4

3 に答える 3

15

、、:がmyfile.aあるmyfile.bとします。myfile.c

for i in myfile.*; do echo mv "$i" "${i/myfile./newname.}"; done

これにより、(の削除時にechonewname.a、、newname.bが作成されnewname.cます。

于 2011-08-20T23:23:24.167 に答える
1

シェルは一般的な正規表現を理解していません。そのための補助プログラムにアウトソーシングする必要があります。あなたのタスクを解決するための古典的なスクリプトの方法は次のようになります

for a in myfile.* ; do
  b=`echo $a | sed 's!^myfile!mydir/newname!'`
  cp $a $b
done

または、perlスクリプトにコマンドのリストを生成させ、それをシェルにソースします。

于 2011-08-20T23:23:39.877 に答える
0

rename私はperlスクリプトの正規表現構文(RobinBarkerとLarryWallによる)が本当に好きです。例:

rename "s/OldFile/NewFile/" OldFile*

OldFile.cとはそれぞれとOldFile.hに名前が変更されますNewFile.cNewFile.h

コピーコマンドでまったく同じことをしたかっただけです。

copy "s/OldFile/NewFile/" OldFile*

そこで、そのスクリプトを複製し、renameステートメントを。を介してコピーするように変更しましたFile::Copy。出来上がり!perl-regex構文を使用したコピーコマンド:

https://gist.github.com/jcward/0ead33bd79f2061c68728cc82582241f

于 2018-04-06T18:40:02.537 に答える