「-exec rm -f {} \」を使用した場合の「find: `-exec 'への引数がありません」


12

私はこのコマンドを実行します:

~/shell_temp$ find . -type f -name "IMAG1806.jpg" -exec rm -f {}\

私は以下の出力を得ました:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

現在のディレクトリからファイルを見つけて削除するための正確なコマンドは何-execですか?


1
ただできないrm "IMAG1806.jpg"?同じディレクトリにあるので、それが何であるかを知っています。
TheWanderer

@ Zacharee1-OPが「ドライラン」を実行していると仮定します。私は複数のファイルが意図したものか、少なくとも-execとファイルのリストを確認せずに実行しているだけで、あなたのfind「発見」の場合には、RMで-iを使用して検討する
パンサー

1
@ Zacharee1:findコマンドは、現在のディレクトリとそのすべてのサブディレクトリ(この深度で)でこの名前で呼び出されたすべてのファイルを削除します。
デニス

3
または、直接-exec rm使用-deleteする代わりに使用します。
Braiam

回答:


30

あなたはAを逃した;(あまりにもの間、スペース終わり{};)。正しいコマンドは次のとおりです。

find . -type f -name "IMAG1806.jpg" -exec rm -f {} \;

;-exec述語の終わりを示しますfind

また、我々が使用していることに注意してください\;つまり、\目の前で;の解釈逃れるために;それ以外の場合は、シェルが扱う、シェルによると;、全体の終わりとfindコマンドとfind同じエラーがスローされます。の';'代わりに使用することもできます\;

\最後に使用していました。これは、シェルがPS2(で示される>)を介して入力を継続し、IMAG1806.jpg再度入力したことを示すため、コマンド全体は次のようになります。

find . -type f -name "IMAG1806.jpg" -exec rm -f {}IMAG1806.jpg

ご覧のとおり、これは有効なコマンドではなくIMAG1806.jpg、最後に、-exec述語を閉じず、{}との間にスペースがありません\;


1
「あなたはAを逃した;私は、私が誤って入力した実現する前にトラブルシューティングの10分を費やして、このためのおかげで終わり」:ではなく;...ミスにこれらの近代的なHD画面上での簡単な、
user5359531

7

簡単にできます

find . -type f -name 'IMAGE1806.jpg' -delete

manページから:

Delete files; true if removal succeeded.  If the removal failed,
an  error message is issued.  If -delete fails, find's exit sta‐
tus will be nonzero (when it eventually exits).  Use of  -delete
automatically turns on the -depth option.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.