別のサブディレクトリにある複数のファイルを見つけて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
実装ではこれを実行しない可能性があります)。上記のコマンドでは、この事実を使用してディレクトリパスを指定せずにファイル名を次のように変更します。./
find
logo.png
oldlogo.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%/*}
のディレクトリ部分を返します。/
$pathname
dirname "$pathname"