15

ディレクトリから mysql と temp の 2 つのディレクトリを除くすべてを消去する必要があるスクリプトを作成しています。

私はこれを試しました:

ls * | grep -v mysql | grep -v temp | xargs rm -rf

しかし、これは必要のない、名前に mysql が含まれるすべてのファイルも保持します。また、他のディレクトリは削除されません。

何か案は?

4

3 に答える 3

35

あなたは試すことができます:

rm -rf !(mysql|init)

定義されたPOSIXはどれですか:

 Glob patterns can also contain pattern lists. A pattern list is a sequence
of one or more patterns separated by either | or &. ... The following list
describes valid sub-patterns.

...
!(pattern-list):
    Matches any string that does not match the specified pattern-list.
...

:最初に時間をかけてテストしてください!echo@mnagel が正式に指摘したように、いくつかのテスト フォルダーを作成するか、単にパラメーター置換を作成します。

echo !(mysql|init)

有用な情報の追加: マッチングがアクティブでない場合は、次を使用して有効/無効にすることができます。

shopt extglob                   # shows extglob status
shopt -s extglob                # enables extglob
shopt -u extglob                # disables extglob
于 2013-07-30T23:47:32.060 に答える
3

find を使用し、mysql と temp を無視してから rm -rf を実行できます。

find . ! -iname mysql ! -iname temp -exec rm -rf {} \;
于 2013-07-30T23:51:29.597 に答える