mv [duplicate]を使用して複数のファイルの最初の部分の名前を変更する

mv [duplicate]を使用して複数のファイルの最初の部分の名前を変更する

ディレクトリには、次のファイルとそれ以上のファイルがあります。

  • ファイル1.txt
  • ファイル1.html
  • ファイル1.pdf
  • ...

すべてファイル1と交換する必要があります新しいファイル:

  • 新しいファイル.txt
  • newfile.html
  • 新しいファイル.pdf
  • ...

私は試した:

for f in $(ls file1*); do mv $f newfile*; done

これは置き換えますみんなファイルとファイル1ファイルとして新しいファイル*

for f in $(ls file1*); do mv $f ${f/$f/"newfile"}; done

これはまた置き換えますみんなファイルとファイル1ファイルとして新しいファイル。または

find . -name "file1.*" -exec sh -c 'mv I DONT KNOW' _ {} \;

ファイル名の一部を変数に設定して変更する方法がわかりません。

mvを使ってこれを行う最も簡単な方法は何ですか?

答え1

Linuxで実行している場合、これを実装する最も簡単な方法は次のものを使用することですrename(パッケージの一部です)util-linux

rename 'file1' 'newfile' file1*

これはあなたが説明することを行います。 3つのパラメータが必要ですrename

  1. ファイル名で探すべきこと
  2. 代わりに何を使うべきですか?
  3. 処理するファイルマスク

クイック検索をしましたが、renameこれが最初のヒットケースでした。http://linux.icydog.net/rename.php

修正するシステムに存在しないがrename存在する場合は、bash次のようにバッチの名前変更を実行できます。これはrename上記のものと同じです。

for f in file1*; do mv -v "$f" "${f/file1/newfile}"; done

答え2

努力する:

for f in ./file1.*; do
  echo mv "$f" "newfile.${f##*.}"
done

このコードはmvコマンドの内容のみを表示します。これが必要な場合は、echo前のmvコマンドを削除してください。

答え3

Debianベースのシステムでは、renameユーティリティはPerl renameであり、構文は少し異なります。

rename 's/file1/newfile/' file1*

最初のパラメーターは、見つかった各ファイル名に適用されるPerl式です。

答え4

GNUを使って次を見つけてください。

find . -maxdepth 1 -name "file1*" -printf "%f\0" | xargs -0 -I {} echo mv -v {} new{}

問題がなければ削除してくださいecho

関連情報