lsをgrepにパイプし、grepでフィルタリングされたファイルを削除するにはどうすればよいですか?

lsをgrepにパイプし、grepでフィルタリングされたファイルを削除するにはどうすればよいですか?

メインファイルの一部のパッケージを削除したいのですが、ファイル名が長すぎます(google-chrome-stable_current_i386.deb)。だから私はコマンドを使ってls|grep chrome|rmファイルをgrepにパイプしてクロムファイルをフィルタリングしてから削除することにしました。うまくいかなかったので、何をすべきか知りたいです。

答え1

それは私をほとんど眉をひっくり返した。

  1. おそらくこの事実を再び指摘したくないでしょう。散弾銃あなたの足に。デフォルトでは、あらゆる種類の構文解析がls優れています。複雑でエラーが発生しやすいこの確立された方法よりfind [...] -execまたは
  2. 誰かがあなたのためにTrollディストリビューションをインストールしない限り、シェルはTab完成します。を入力rm googleしてタップしますTab。すぐに完了しない場合は、もう一度Tabタップして一致するファイルのリストを確認してください。ファイル名の文字をさらに入力して完了するまで範囲を絞り込み、コマンドを実行します。
  3. 管路!=パラメータ。標準入力はバイナリデータストリームコマンドは非同期的に入力できます。パラメーターは、コマンドの実行時に一度だけコマンドに渡されるスペースで区切られた文字列です。これらはほとんど交換できません。

答え2

あなたの考えは正しいです。ちょうどいくつかの詳細を逃しただけです。渡されたSTDINのリストとrm必須パラメータを扱っているのでxargs

したがって:

ls | grep chrome | xargs rm

あなたが欲しいものを与えなければなりません。

chromeファイルを除くすべての項目を削除するには、-vこのgrepステートメントに追加します。

この質問に対する他の答えによれば、これは達成しようとする目標を達成するのに不十分な方法かもしれません。

答え3

ワイルドカード文字でfindコマンドを使用することもできます。

find . -maxdepth 1 -name '*chrome*' -delete

"-maxlength"パラメーターは、findが現在のディレクトリでのみ機能し、サブディレクトリとして再帰的に機能しないことを保証します。

答え4

touch 0 1 2 3 4 5 6 7 8 9
find . -name \[0-9] -ok rm {} \;

< rm ... ./0 > ? y
< rm ... ./9 > ? y
< rm ... ./8 > ? y
< rm ... ./7 > ? y
< rm ... ./6 > ? y
< rm ... ./5 > ? y
< rm ... ./4 > ? y
< rm ... ./3 > ? y
< rm ... ./2 > ? y
< rm ... ./1 > ? y
^C

...-name '*c*.deb'あなたに適したパターンを使用してください。

関連情報