特定のPNG画像を見つけて名前を変更します。

特定のPNG画像を見つけて名前を変更します。

別のサブディレクトリにある複数のファイルを見つけてlogo.png名前をに変更する必要がありますoldlogo.png。どうすればいいですか?

ファイル(各ファイルのサイズは56431バイト)を探し始めましたが、logo.png同じサブディレクトリ内の別のファイルに移動する方法がわかりません。

ファイルの検索方法は次のとおりです。

find -name logo.png -size 56431c

答え1

findコマンドが名前を変更したいファイルを正確に見つけたと仮定すると、次のmv呼び出しを使用してそのファイルの名前を変更できます。find-execdir

find . -name logo.png -size 56431c -execdir mv {} oldlogo.png \;

この-execdir述部は非標準ですが、しばしば実装されます。ファイル名に置き換えられた名前のディレクトリで指定されたユーティリティを実行します{}(GNUはファイル名の前に追加しますが、他のfind実装ではこれを実行しない可能性があります)。上記のコマンドでは、この事実を使用してディレクトリパスを指定せずにファイル名を次のように変更します。./findlogo.pngoldlogo.png

Standardを使用すると、find次のことができます。

find . -name logo.png -size 56431c -exec sh -c '
    for pathname do
        mv "$pathname" "${pathname%/*}/oldlogo.png"
    done' sh {} +

上記のコードは、sh -c見つかったファイルのパス名を一括して呼び出します。インラインスクリプトは与えられたパス名の配置を繰り返し、各パス名を見つかったoldlogo.pngのと同じディレクトリに名前を変更しますfind。パラメータ置換は、値から最後のエントリとそれ以降のすべてのエントリを削除するため、パス名${pathname%/*}のディレクトリ部分を返します。/$pathnamedirname "$pathname"

関連情報