![-exec [重複]でパラメータが見つかりません。](https://linux33.com/image/128457/-exec%20%5B%E9%87%8D%E8%A4%87%5D%E3%81%A7%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82.png)
この問題があります。ファイルにディレクトリ名なしで映画のリストを出力しようとしましたが、エラーがあります。パラメータが見つかりません。-exeс
以下のコードは次のとおりです。
$ find . -name "*.avi" -o -name "*.mkv" -exec basename \{} \ > ~/Bash/test/rm/films.txt
答え1
コマンドには2つのタイプミスがあります。
\{}
しなければならない{}
(バックスラッシュ+スペース)はまたはで
\␣
なければなりません。\;
';'
-exec
/predicate オプションは、find
実行するコマンドが終了する場所を知る必要があります。最後の項目はこれについて説明します;
(シェルで保護するには引用符が必要です)。
エスケープや引用は不要です{}
。
優先順位の問題もあるかもしれません。あなたは基本的に言う
condition OR condition AND run-this-command
これは不明です。と言うほうがいい
(condition OR condition) AND run-this-command
実行方法は次のとおりです。
find . -type f '(' -name '*.avi' -o -name '*.mkv' ')' \
-exec basename {} ';' > ~/Bash/test/rm/films.txt
-type f
一般的なファイルだけが考慮されるように、これも追加しました。
答え2
この試み:
$ find . \( -name "*.avi" -o -name "*.mkv" \) -exec basename {} \; > ~/Bash/test/rm/films.txt