「+」(プラス)と「;」の使用の違いは何ですか (セミコロン)-execコマンドで?


28

私はどのような違いが使用しての間にあることを知って思ったんだけど+;の終わりに-exec私が使用している場合、コマンドfindのコマンド?

find .... -exec ... \; 

VS

find .... -exec ... + 

回答:


36

-exec ... \;次々にアイテムを実行します。したがって、3つのファイルがある場合、exec行は3回実行されます。

-exec ... {} +一度に複数のファイルを取ることができコマンド用です(例えばcatstatls)。で見つかったファイルfindは、xargsコマンドのように連結されています。つまり、フォークアウトが少なく、小規模な操作の場合、大幅な高速化を意味します。

10,000個の空のファイルを処理するパフォーマンスデモを次に示します。

$ mkdir testdir
$ touch testdir/{0000..9999}

$ time find testdir/ -type f -exec cat {} \;
real    0m8.622s
user    0m0.452s
sys     0m8.288s

$ time find testdir/ -type f -exec cat {} +
real    0m0.052s
user    0m0.015s
sys     0m0.037s

繰り返しますが、これは複数のファイル名を取ることができるコマンドでのみ機能します。コマンドがそのようなものである場合は、マンページを見て解決できます。ここからの概要ですman cat

SYNOPSIS
       cat [OPTION]... [FILE]...

オンの省略記号は[FILE]...、複数のファイルを使用できることを意味します。

+単一のコマンドでのみ使用でき{}、行に1つだけが必要です。\;複数のゼロ対多グループで動作できます。


4
例:with \;では、実行されるコマンドはになりますcat 1; cat 2; cat 3。では+、実行したコマンドは次のようになりますcat 1 2 3
アラアアリ14

知る限りでは+、これはPOSIXではないため、Linux以外のシステムでは利用できない場合があります。プラットフォームを離れることはないが、Solarisを使用する必要があるかどうかを知っておくと便利です。:)
サイモンリヒター14

いいね、情報ありがとう。私は通常-exec <command> {} ';'、タイピングが簡単だからです(タイプすることはできますが、最高のテクニックはありません)。
hanetzer 14

2
@SimonRichter:いいえ、-exec ... {} +POSIXです。参照:pubs.opengroup.org/onlinepubs/9699919799/utilities/...
cuonglm

@SimonRichter 2001年にPOSIX仕様に含める-exec ... {} +拡張機能が提案され、2004年にPOSIX第6号に批准されました。使用しているSolarisのバージョンは、そのPOSIX標準よりも古い(または以前のバージョンを対象とする)可能性があります。
オリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.