2

「NAME-xxxxxx.tedx」という形式のファイルがあり、「-xxxxxx」の部分を削除したい。xはすべて数字です。正規表現"\-[0-9]{1,6}"は部分文字列と一致しますが、ファイル名から削除する方法がわかりません。

シェルでそれをどのように行うことができるか考えていますか?

4

3 に答える 3

5

コマンドのperlバージョンがrenameインストールされている場合は、次のことを試すことができます。

rename 's/-[0-9]+//' *.tedx

デモ:

[me@home]$ ls
hello-123.tedx  world-23456.tedx
[me@home]$ rename 's/-[0-9]+//' *.tedx
[me@home]$ ls
hello.tedx  world.tedx

このコマンドは、既存のファイルを上書きすることを意味する場合、ファイルの名前を変更しないほど賢いです。

[me@home]$ ls
hello-123.tedx  world-123.tedx  world-23456.tedx
[me@home]$ rename 's/-[0-9]+//' *.tedx
world-23456.tedx not renamed: world.tedx already exists
[me@home]$ ls
hello.tedx  world-23456.tedx  world.tedx
于 2012-12-19T10:51:44.450 に答える
3
echo NAME-12345.tedx | sed "s/-[0-9]*//g"

与えるでしょうNAME.tedxmvしたがって、ループを使用し、コマンドを使用してファイルを移動できます。

for file in *.tedx; do
   newfile=$(echo "$file" | sed "s/-[0-9]*//g")
   mv "$file" $newfile
done
于 2012-12-19T10:43:39.127 に答える
1

シェルだけを使いたい場合

shopt -s extglob
for f in *-+([0-9]]).tedx; do
    newname=${f%-*}.tedx    # strip off the dash and all following chars
    [[ -f $newname ]] || mv "$f" "$newname"
done
于 2012-12-19T14:10:59.250 に答える