28

このようにファイル名を変更する必要があります

transform.php?dappName=Test&transformer=YAML&v_id=XXXXX

これだけに

XXXXX.txt

どうすればいいですか?

mv少なくとも25000ファイルであるため、複数のコマンドが必要であることを理解しています。

4

11 に答える 11

53

最も簡単な解決策は、 「mmv」を使用することです

あなたは書ける:

mmv "long_name*.txt" "short_#1.txt"

「#1」は、最初のワイルドカードに一致するものに置き換えられます。同様に、#2 は 2 番目に置き換えられます。

だからあなたは次のようなことをします

mmv "index*_type*.txt" "t#2_i#1.txt"

index1_type9.txt の名前を t9_i1.txt に変更するには

mmv は、多くの Linux ディストリビューションでは標準ではありませんが、ネット上で簡単に見つけることができます。

于 2009-01-06T20:56:48.000 に答える
19

zshを使用している場合は、次のこともできます。

autoload zmv
zmv 'transform.php?dappName=Test&transformer=YAML&v_id=(*)' '$1.txt'
于 2009-01-06T20:30:58.240 に答える
13

非常に単純なシェルスクリプトを作成します。このスクリプトでは、最も難しい部分が名前を変更しています。

スクリプトの概要は簡単です(ここではbash構文):

for i in 'transform.php?dappName=Test&transformer=YAML&v_id='*
do
    mv $i <modified name>
done

名前の変更には多くのオプションがあります。最も簡単なのは、おそらく次のようなawkワンライナーだと思います

`echo $i  |  awk -F'=' '{print $4}'`

それで...

for i in 'transform.php?dappName=Test&transformer=YAML&v_id='*
do
    mv $i `echo $i |  awk -F'=' '{print $4}'`.txt 
done

アップデート

さて、以下で指摘するように、これはファイルの十分な数のリストに対して必ずしも機能するとは限りません。*は、コマンドラインの長さの制限を超えます。したがって、次を使用します。

$ find . -name 'transform.php?dappName=Test&transformer=YAML&v_id=*' -prune -print |
while read
do
    mv $reply `echo $reply |  awk -F'=' '{print $4}'`.txt 
done
于 2009-01-06T20:24:23.823 に答える
5

名前の変更コマンドを試す

または、ls の結果を perl 正規表現にパイプすることもできます。

于 2009-01-06T20:21:30.833 に答える
4

名前を変換したいもの(perl、sed、awkなど)を使用できます。Pythonワンライナーを使用します:

for file in 'transform.php?dappName=Test&transformer=YAML&v_id='*; do 
    mv $file `echo $file | python -c "print raw_input().split('=')[-1]"`.txt;
done

これは完全にPythonでの同じスクリプトです:

import glob, os
PATTERN="transform.php?dappName=Test&transformer=YAML&v_id=*"

for filename in glob.iglob(PATTERN):
      newname = filename.split('=')[-1] + ".txt"
      print filename, '==>', newname
      os.rename(filename, newname)

補足:ページをつかんでいる間、正しい名前でページを保存する方が簡単だったでしょう...

于 2009-01-06T20:25:49.717 に答える
4
find -name '*v_id=*' | perl -lne'rename($_, qq($1.txt)) if /v_id=(\S+)/'
于 2009-01-06T21:11:05.943 に答える
0

ファイルの名前を簡単に一括変更できる Perl スクリプトであるren-regexpを使用します。

21:25:11 $ ls
transform.php?dappName=Test&transformer=YAML&v_id=12345

21:25:12 $ ren-regexp 's/transform.php.*v_id=(\d+)/$1.txt/' transform.php*

  transform.php?dappName=Test&transformer=YAML&v_id=12345
1 12345.txt


21:26:33 $ ls
12345.txt
于 2011-04-12T04:57:47.467 に答える
-1

これも機能するはずです:

prfx='transform.php?dappName=Test&transformer=YAML&v_id='

ls $prfx* | sed s/$prfx// | xargs -Ipsx mv "$prfx"psx psx

于 2012-12-24T20:37:23.667 に答える
-9

わかりました、これには Windows バイナリを実行できる必要があります。

ただし、 Total Commanderを実行できる場合は、次のようにします。

  1. * ですべてのファイルを選択し、ctrl-Mを押します

  2. 検索フィールドに「transform.php?dappName=Test&transformer=YAML&v_id=」を貼り付けます

    (置換は空のままにします)

  3. スタートを押します

これほど簡単なことはありません。このダイアログで正規表現を使用して名前を変更することもでき、ファイルの名前がどのように変更されるかをリアルタイムでプレビューできます。

于 2009-01-06T21:00:34.403 に答える