番号は同じままで、スペースでファイル名を変更します。

番号は同じままで、スペースでファイル名を変更します。

数値文字列をそのままにしながら、ファイル名にスペースを含む多くのファイルの名前を変更したいと思います。すべてのファイルに対して数字が連続しているわけではなく、数字の前後の文字列は同じではありません。数字の前の文字列がすべてのファイルに対して同じであることを望みます。

たとえば、

100 foo_1.ext
200 foo_2.ext
201 foo_3.ext

次に名前を変更する

100.ext
200.ext
201.ext

答え1

あなたは試すことができます:

for a in *.ext; do mv "$a" "${a/ */}.ext"; done

説明する:

for a in *.ext.ext- 現在のディレクトリにある拡張子を持つすべてのファイルをインポートします。

a/ */- 部分文字列を何もないものに置き換えます( ${string/substring/replacement} )。この構文は、空白(含む)の後にあるすべてのシンボルを取得して削除します。

またはあなたが持っているなら拡張子が異なるファイルディレクトリ内のすべてのファイルを処理する必要がある場合は、以下を試してください。

for a in *; do mv "$a" "${a/ *\./\.}"; done

Perlの名前変更コマンドと同等のものは次のとおりです。

prename 's/ .*\./\./' *

はい: ドキュメント

100 foo_1.ext
200 foo_1.ext
201 foo_3.ext
3401 txt_3.txt

次に、名前が変更されます。

100.ext
200.ext
201.ext
3401.txt

名前にスペースが含まれていないファイルは処理されません。

答え2

これに使用されますprename

prename 's/\D*(\d*).*/$1.ext/' *.ext

これは、指定されたすべてのファイルに対して、\D*\d*.*拡張正規表現(数字ではなく複数の後に複数の数字と残りの名前が続くもの)を含む部分()(数字や拡張子など)に置き換えます。

質問を編集した後、ファイル名は数字で始まり、その後にスペースが続くように見えます。これにより、状況がさらに単純化されます。

prename 's/ .*/.ext/' *.ext

答え3

Perlの名前変更(Linuxの名前変更ではない)を使用できます。

prename  -n 's/(\d*)\s*foo_\d*/$1/g' /path/to/folder/*.ext

または

prename  -n 's/(\d*)\s*.*_\d*/$1/g' /path/to/folder/*.ext

サンプルファイル名:

100 foo_2.ext  
101 foo_1.ext   
200 foo_234.ext   
302 foo_2.ext

結果:

100.ext
101.ext
200.ext
302.ext

情報:

  1. (\d)\sfoo_\dまたは(\d)\s.*_\d: ファイル名と一致
  2. (\d):前の番号を返します。
  3. $1:戻り値変数2
  4. -nprename:コマンド結果を表示するために使用され、変更するには削除してください。

望むより:man prename

関連情報