アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下は、samplesディレクトリ以下で拡張子が「.png」のファイルを検索し、サイズの大きい順に10個表示するコマンドですが、

$ find samples -name "*.png" -exec du {} \; | sort -nr | head

duコマンドの後の{}のブレース展開は何をしているのでしょうか?
また、\;は;をクウォートしている、(セミコロンの意味で使う)
という理解で良いでしょうか?

A 回答 (2件)

man pageより抜粋:


文字列 `{}' は、 コマンド引数内に現れるすべての箇所で、 対象ファイル名に置き換えられます。

du の前に echo 付与してfindをドライランすれば動作がわかりやすいです。
    • good
    • 0

https://linuxjm.osdn.jp/html/GNU_findutils/man1/ …

> \;は;をクウォートしている、(セミコロンの意味で使う)
という理解で良いでしょうか?

そうです。
find の -exec は セミコロンだけの引数までを「実行するコマンド」として認識します。
du {}
を実行したい場合は
-exec du {} ;
と指定する必要があります。
セミコロンは、シェルではコマンドの区切りとして認識されます。
-exec du {} ; と記述してしまうと、 findコマンドには -exec du {} だけが指定され、セミコロンは渡されません。
これを避けるために、セミコロンをエスケープします。(クオートも可)

同様に{} も \{\} "{}" 等の方が無難です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!