サブフォルダーを含む複数のファイル名を変更するにはどうすればよいですか?

サブフォルダーを含む複数のファイル名を変更するにはどうすればよいですか?

たとえば、次のファイルがあります。

./dirA/fileA.png
./dirA/fileB.png
./dirA/fileC.png
./dirB/fileD.png
./dirB/fileE.png
./dirB/dirC/fileF.png

ファイル名を次のように変更する 1 行のコマンドまたはスクリプトはありますか?

./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB/[email protected]
./dirB/[email protected]
./dirB/dirC/[email protected]

答え1

試す:

find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
  • find .

    これにより、現在のディレクトリでファイル検索が開始されます。

  • -type f

    これにより、検索は通常のファイルに制限されます。

  • -name '*.png'

    これにより、名前が で終わるファイルに検索が制限されます.png

  • -execdir bash -c '...' Move {} \;

    これは、見つかったファイルの名前に割り当てられた$0Move一重引用符内のコマンドを実行します。この場合、一重引用符内のコマンドは次のようになります。$1

  • mv "$1" "${1%.png}@2x.png"

    これにより、ファイル名が で終わるように変更されます@2x.png。この構文により、ファイル名の末尾から${1%.png}が削除されます。したがって、 はファイル名の末尾の を に置き換えます。.png${1%.png}@2x.png.png@2x.png

以下のファイルがあるディレクトリから始めましょう:

$ find .
.
./dirA
./dirA/fileA.png
./dirA/fileC.png
./dirA/fileB.png
./dirB
./dirB/fileE.png
./dirB/dirC
./dirB/dirC/fileF.png
./dirB/fileD.png

それでは、コマンドを実行してみましょう:

$ find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;

コマンドを実行すると、次のファイルが作成されます。

$ find .
.
./dirA
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB
./dirB/dirC
./dirB/dirC/[email protected]
./dirB/[email protected]
./dirB/[email protected]

関連情報