カスタムアクションLinuxのBash機能です。書くとLinuxターミナルで
root@localhost: find ~ -type f -name 'foo*' -ok ls -l '{}' ';'
次に、次のように始まるファイル名があることを確認し、foo
ファイルの詳細を表示します。
< ls ... /home/me/bin/foo > ? y
-rwxr-xr-x 1 me me 224 2011-10-29 18:44 /home/me/bin/foo
< ls ... /home/me/foo.txt > ? y
-rw-r--r-- 1 me me 0 2012-09-19 12:53 /home/me/foo.txt
押すたびに、yこれらの結果が表示されます。
私の質問はこの文字の特別な意味は何ですか'{}' ';'
?
{}
現在のパスを表すコマンドを読んで終了しましたが、';'
bashでは決して';'
。
答え1
これらはbashの一部ではありませんfind
。独立プログラムそして、実行のためにbashやPOSIXシェルも必要ありません。たとえば、bashとうまく機能しますfish
が、POSIXと互換性がなく、bashと同じ構文規則に従いません。実際にはシェルなしで使用できます(例:プログラミングコンテキストで)。
そのため(POSIXシェルを使用する場合、またはこの場合は同様の規則を持つシェルを使用している場合)、いくつかのパラメータで引用符を使用したいと思います。find
たとえば、find . -name '*foo'
一重引用符内の文字列は、置換または拡張を実行せずに渡されます。シェルはこれについて何もしません。 bashで使用しfind . name *foo
、そのglobに一致するファイルが現在のディレクトリに存在する場合は、何もしないことがあります。
異なるルールを持つシェルを使用している場合は、それらを使用するときにこれらのルールを考慮する必要がありますfind
。たとえば、実際に{}
引用する必要はありませんが、bash
を使用して同じことをすることがfish
できますfind: missing argument to '-exec'
。
中かっこは bash で意味があります。パラメーターの置換/拡張およびコマンドのグループ化に使用されます。私は同様の目的を果たしますfind
が、解析するのではfind
ありませんbash
。
答え2
{
中かっこと}
セミコロンがありますが、;
するbashでは特別な意味があります。この場合、find
これを解釈するのはシェルではなくコマンド自体です。コマンドはそのコマンドと同じ構文を使用するため、-ok
マニュアルfind
ページ()のこのセクションで-exec
完全な指示を見つけることができます。man find
-exec command ;
Execute command; true if 0 status is returned. All following
arguments to find are taken to be arguments to the command until
an argument consisting of `;' is encountered. The string `{}'
is replaced by the current file name being processed everywhere
it occurs in the arguments to the command, not just in arguments
where it is alone, as in some versions of find. Both of these
constructions might need to be escaped (with a `\') or quoted to
protect them from expansion by the shell.