find -execが魚で動作しない

find -execが魚で動作しない

Fishをシェルとして使用している間は、次のようにして現在のディレクトリにある複数のCソースファイルに対する権限を設定しようとしています。

find . -type f -name "*.c" -exec chmod 644 {} +;

エラーが発生しました。

検索: '-exec'引数がありません

または

find . -type f -name "*.c" -exec chmod 644 {} \;

エラーが発生しました。

chmod: ''にアクセスできません:そのファイルまたはディレクトリはありません

何が問題なの?

答え1

fish仕事が起こる{}引用が必要な数少ないシェルの1つ

したがって、そのシェルを使用するには、次のものが必要です。

find . -type f -name '*.c' -exec chmod 644 '{}' +

引用符がない場合は空の{}パラメータに展開されるため、コマンドは次のようになります。

find . -type f -name '*.c' -exec chmod 644 '' +

そして、find行方不明について文句を言います{}(またはそれに;従うときだけ+終端者として認識されます)。-exec{}

他のほとんどのシェルには{}

答え2

{釣りには}特別な意味があります。使用する前にエスケープする必要がありますfind。たとえば、次のようになります。

find . -type f -name "*.c" -exec chmod 644 \{\} \;

{}または、これらの言葉を引用する必要があります。

find . -type f -name "*.c" -exec chmod 644 '{}' \;

答え3

あなたの例で予想される末尾のセミコロンがありません。

find . -type f -name "*.c" -exec chmod 644 {} \;

質問を修正してみると「魚」の殻です。これは既知の問題であり、@rahulが述べた引用符を使用して解決できます。ただし、提案されたエスケープは私の設定では機能しません。一重引用符は次のとおりです。

find . -type f -name "*.c" -exec chmod 644 '{}' \;
find . -type f -name "*.c" -exec chmod 644 '{}' +

する(切り取り/貼り付けの代わりに文字を入力する場合)中括弧をエスケープするためにコマンドラインを編集しようとしたときに発生します。混乱して進行できません。以下はバックスラッシュを挿入した後のスクリーンショットです(切り取り/貼り付けを試みる必要はありません)。それ):

コマンドラインの編集

次にEnterキーを押します。

エンターを押すだけです

だからいいえ、フィッシュは実際にエスケープされた中かっこでは機能しません。そんなふりをするだけです。押し続けてenter最終的なデモンストレーションをしてみてください。

qed

追加資料:

関連情報