たとえば、次のファイルがあります。
./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 {} \;
これは、見つかったファイルの名前に割り当てられた
$0
、Move
一重引用符内のコマンドを実行します。この場合、一重引用符内のコマンドは次のようになります。$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]