私はbrainとhandsでcompiz
のいくつかの問題を解決したい。
ところで、Ubuntu 12.04のソースからcompiz
をビルドするために次のコマンドを入力しました
find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file={};
http://www.brazzi64.net/blog/building-compiz-from-source-in-ubuntu-12-04/ でそのコマンドを参照しました
そして、次のメッセージが表示されます。
Findコマンドで-exec
オプションを使用する方法、それは私の間違いだと思います。
あなたはほとんどそこにいます。コマンドの終わりがどこにあるかを見つけるために、終わりに\;
が必要です。
find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file={} \;
一度に複数の引数を取ることができるコマンドの場合(たとえば、各ファイル名をstat
だけにしたい場合)、代わりに\+
を使用できます。これにより、単一のファイルごとに分岐しないため、より高速に実行できる複合引数が作成されます。
find . -exec stat {} \+
ただし、ここでは例としては機能しません。
引用符は不要であることを強調するためのテストハーネスです。
$ mkdir 1 2 1\ 2 # makes three directories
$ touch {1,2}/single # puts a file in each of the two singles
$ touch 1\ 2/COMBO # puts a file in the dir with a space
$ find -type d -exec ls {} \;
1 1 2 2
single
single
COMBO
クォートを処理していなかった場合、COMBOの代わりに次のように表示されます。
1:
correct
2:
correct
このコマンドを使用できます。
find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file '{}' ';'
Findコマンドのマニュアル($ man find)によると。 delete、lsなどのfindコマンドで事前定義できるアクションがあります。
定義済みのアクションに加えて、任意のコマンドを呼び出すこともできます。これを行う従来の方法は、-execアクションを使用することです。このアクションは次のように機能します。
-exec command {} ;
ここで、commandはコマンドの名前、{}は現在のパス名のシンボリック表現、セミコロンはコマンドの終わりを示す必須の区切り文字です。
繰り返しますが、中括弧とセミコロンはシェルにとって特別な意味を持つため、引用符で囲むかエスケープする必要があります。