rm -fの代替オプション


10

コマンドラインを実行したい:

cd ~/www/tmp/; rm -P 2*

しかし、2で始まるファイルがない場合、エラーが発生します。

-fただし、を使用したいと思うかもしれません。

-f      Attempt to remove the files without prompting for confirmation, regardless of the file's permissions.  If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.

そして、ファイルのアクセス許可について気にします。何か変なことが起こった場合は、コマンドabortを使用します。「存在しない」エラーのみを抑制したい。

私は 'rmエラー'のある他のいくつかの質問を見ました、そして(ちょっと)関連があるように見えるこれらの2つを見つけました:

名前でファイルとディレクトリを削除します。そのようなファイル、又はディレクトリはありません

しかし、私はこの質問への回答で起こっているすべてを理解しておらず、それが必要であることを知りませんか?

touchこの質問で提案ハック:

ファイルが欠落しているときにrmがレポートしないのですか?

パフォーマンスヒットは気にしないと思うので、機能しているようです(ただし、どのようなタイプのパフォーマンスヒットを採用しますか?-つまり、これはかなりスケーラブルな手法ですか、それとも、非常に悪い習慣を学んでいるだけですか?)

if-thenコマンドラインでどのように実行するかわかりません。

単純なコマンドラインのカットアンドペーストによるクリーンアップの他のオプションはありますか?

find -delete私の場合のために良い仕事?もしそうなら、なぜですか?


問題のエラー:

rm: 2*: No such file or directory

1
エラーはシェルではなくrm、シェルからのもの であるため、それが何であるかを言う必要があります。
Michael Homer

zshインタラクティブシェルとして使用していますか?No matches foundエラーが発生していますか?
クサラナンダ

2
@MichaelHomerいいえ、エラーはrmからのものです。シェルは、文字列2*をファイルのリストに展開するのではなく、単にrmに渡しました。問題のエラーを見てください:rmは、sh / bas / zsh /ではなく、不平を言っていると言っています...
doneal24

回答:


13

名前がディレクトリ内のパターンに一致する既存の通常のファイルのみを呼び出すにrm -Pは(以下は不可):

find directory -maxdepth 1 -type f -name 'pattern' -exec rm -P {} +

例えば、

find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +

非ディレクトリのみを照合するに! -type dは、の代わりにを使用し-type fます。違いは! -type d、より広い範囲のファイルタイプ(シンボリックリンク、名前付きパイプ、ソケットなど)に当てはまることです。

見つかったファイルに対していくつかの条件を求めるプロンプトが表示されるようにしたいので、として機能するため、代わりにを使用しないでください。-delete-exec rmrm -f

削除-maxdepth 1findて、サブディレクトリを再帰的に調べます。


3
けれどもが! -type d近いかもしれないrm 2*、と思いますか?
ムル

したがって、その機能を使用するには-Pを追加する必要がありますか?:find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
user3082

@ user3082はい、あなた-Pも使用したかったのを忘れました。
クサラナンダ

@muruに感謝します。実際に欲しいのですが-type f、そのようにrm振る舞う方法がわかりませんでした。そのため、@ Kusalanadaの提案は正解であり、差別化/説明は学習に役立ちます。
user3082

@ user3082おそらくシェルの拡張グロビング(rm 2*(.)zshなど)を使用する必要があります。
ムル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.