No.517
【Linux】コマンド実行方法の違い【find】
findで抽出したファイルを対象にコマンドを実行する
普段何気なくワンライナーで書いているが、習慣で書いていてきちんと理解したことがなかった。
今回説明用にまとめたので、備忘録としてメモ。
コマンド実行の方法
- findコマンドの
-execオプションを使用する。 xargsコマンドにパイプで渡す。
前者は複数ファイルを同時に引数として渡すか、ひとつずつ処理するかで若干オプションが変わる。
findコマンドの -exec オプション
ファイルをまとめて処理するパターン。
find [対象パス] findオプション -exec 実行コマンド [実行コマンドオプション] {} +
ファイルをひとつずつ処理するパターン。
find [対象パス] findオプション -exec 実行コマンド [実行コマンドオプション] {} \\;
xargs コマンド
ファイルをまとめて処理するパターン。
find [対象パス] findオプション | xargs 実行コマンド [実行コマンドオプション]
find [対象パス] findオプション | xargs -n 同時に実行するファイル数 実行コマンド [実行コマンドオプション]
ファイルをひとつずつ処理するパターン。
find 対象パス [findオプション] | xargs -n1 実行コマンド [実行コマンドオプション]
補足:ファイル名に半角スペースが含まれる場合
ファイル名に半角スペースが含まれている場合は、区切り文字と見分けがつかずに xargs コマンドでおかしいことになる。
そういう場合は両方のコマンドで o オプションを指定して区切り文字を変更してしまえばOK。
find 対象パス [findオプション] -print0 | xargs -0 -n1 実行コマンド [実行コマンドオプション]