1

これが通常の質問に比べて非常に単純である場合は申し訳ありませんが、私は始めたばかりです。開始名はすべて同じですが、ファイルの種類が異なるファイルがいくつかあります。たとえば、次のようになります。

1234.x
1234.y
1234.z
1234_V2.x
1234_V2.y
1234_V2.z

エンディングとファイルタイプを保持しながら、これらの最初の部分の名前を変更したいと思います。

4321.x
4321.y
4321.z
4321_V2.x etc

使ってみました

mv 1234* 4321* 

rename 1234* 4321*

しかし、運が悪い!私は他のすべての SO 記事にも目を通しており、ループを使用することもできますが、ほとんどはファイルの種類が同じであることに依存しています。

前もって感謝します

4

4 に答える 4

2

bash 置換を使用できます。

for file in 1234* 
do mv "$file" "4321${file#1234}"
done

または、 を次のものに置き換えdo mvます

do mv "$file" "${file/1234/4321}"

man bash下のEXPANSIONセクション、サブセクションで詳細を参照してくださいParameter Expansion

于 2013-11-29T10:16:04.803 に答える
0

1234すべてのファイルのファイル名が一定であると仮定すると4321、これを試すことができます

for fn in `find . -name 1234*` 
do 
    newf=`echo $fn | sed s/1234/4321/`
    mv $fn $newfn
done
于 2013-11-29T10:13:17.320 に答える
0

それが機能するかどうかを確認してください:

rename "s/1234/4321/" 1234*

command は、 pattern の名前を持つファイル内のwithの出現を ( のためs)置換することを意味します"1234""4321"1234*

こちらもご覧ください。あなたのケースよりも少し複雑です。

于 2013-11-29T10:13:59.190 に答える
0

シェル スクリプトを使用することもできますが、多くのフォークが行われるため見苦しく、名前を変更するファイルが多数ある場合は時間がかかります。

for f in 1234*; do echo mv $f $(echo $f | sed -e 's/1234/4321/'); done

そうでrenameなければ、それを行う良い方法です:

rename 's/1234/4321/' 1234*

名前の変更では、最初のパラメーターとして正規表現が必要です。オンラインドキュメントを参照してください

于 2013-11-29T10:10:07.567 に答える