8

Linuxを使用しており、シェルを使用していくつかのファイルを削除する予定です。

フォルダにいくつかのファイルがあり、一部のファイル名には「good」という単語が含まれていますが、含まれていないファイル名もあります。例えば:

ssgood.wmv
ssbad.wmv
goodboy.wmv
cuteboy.wmv

名前に「good」が含まれていないファイルを削除したいので、残りのファイルは次のとおりです。

ssgood.wmv
goodboy.wmv

rmシェルでそれを行う方法は?使ってみます

rm -f *[!good].*

しかし、それは機能しません。

どうもありがとう!

4

3 に答える 3

21

このコマンドは、必要なことを実行する必要があります。

ls -1 | grep -v 'good' | xargs rm -f

正規表現を使用しないため、おそらく他のコマンドよりも高速に実行されます(これは低速であり、このような単純な操作には不要です)。

于 2011-07-03T09:55:47.023 に答える
6

bashを使用すると、シェルオプションを介して「ネガティブ」マッチングを取得できます。extglob

shopt -s extglob
rm !(*good*)
于 2011-07-03T11:53:23.830 に答える
4

find演算子で使用できます-not

find . -not -iname "*good*" -a -not -name "." -exec rm {} \;

以前はそこ-execに電話をかけていましたが、削除アクションが組み込まれているのではないかと思います。以下を参照してくださいrmfind

しかし、それには非常に注意してください。上記では、現在のディレクトリ-a -not -name "."と一致するため、句を挿入する必要があることに注意してください。.だから私-printはビットを入れる前に徹底的にテストしたいと思い-exec rm {} \;ます!

更新:うん、私はそれを使ったことがないが、確かに-delete行動がある。それで:

find . -not -iname "*good*" -a -not -name "." -delete

繰り返しになりますが、注意して、最初に一致させたい以上に一致していないことを再確認してください。

于 2011-07-03T09:54:36.650 に答える