find コマンドの -exec オプションで {} と ; を ' ' (シングルクォート) で囲う意味について


macでサブフォルダ内のファイルを親フォルダに集める操作を行いたいと考えています。次の記事を参考にしました。

[[Mac] サブフォルダ内のファイルを親フォルダに集める【フラット化のコマンド】](https://chiilabo.com/2020/09/mac-
subfolder-flatten-automator-quick-action/)

下に示したコマンドを実行しようと考えています。

[code]

    find . -mindepth 2 -type f -exec mv -i '{}' . ';'
    
[/code]

前半の `find . -mindepth 2 type f` はカレントディレクトリ内で、2階層までのファイルを検索し、後半の `-exec mv -i
'{}' . ';'` は検索したファイルをカレントディレクトリに移動している操作だと理解したのですが、後半の `{}` と `;` を `''`
で囲う意味がよく理解できません。

質問は以下の３つです。

  1. `{}` と `'{}'` は動作として異なるのか
  2. `;` と `';'` は動作として異なるのか
  3. `';'` と `\;` は同じ意味なのか

以上です。教えていただけると嬉しいです。よろしくお願いします。




`{}` や `;` をクォート文字で囲むのは、それをそのまま`find`へのパラメーターとして渡すためです。  
これらの文字はシェルにとって意味のある文字だからです。

たとえば最後の `;` を

[code]

    find . -mindepth 2 -type f -exec mv -i '{}' . ;
    
[/code]

のように書いてしまうと、この `;` はシェルにとっての「コマンドの区切り」なので、`find`へのパラメーターとしては`. -mindepth 2
-type f -exec mv -i {} .`しか渡されないことになってしまいます。

`\;` も `;` をコマンドの区切りではなくただの文字としてエスケープするもので、意味は `';'` と同じです。




`{}` や `;` をクォート文字で囲むのは、それをそのまま`find`へのパラメーターとして渡すためです。  
これらの文字はシェルにとって意味のある文字だからです。

たとえば最後の `;` を

[code]

    find . -mindepth 2 -type f -exec mv -i '{}' . ;
    
[/code]

のように書いてしまうと、この `;` はシェルにとっての「コマンドの区切り」なので、`find`へのパラメーターとしては`. -mindepth 2
-type f -exec mv -i {} .`しか渡されないことになってしまいます。

`\;` も `;` をコマンドの区切りではなくただの文字としてエスケープするもので、意味は `';'` と同じです。

