grepアイテムを除いてフォルダ内のすべてのアイテムを削除する方法

grepアイテムを除いてフォルダ内のすべてのアイテムを削除する方法

バックアップに使用されるディレクトリのクリーンアップスクリプトを生成したいと思います。

例:私のディレクトリには、ファイル名に数字が10個のファイルがあります。

たとえば、

b_100
b_101
b_102
b_103
b_104
b_105
b_106
b_107
b_108
b_109
b_110

b_105〜b_110ディレクトリ内の特定のファイルをgrepし、残りのファイルをすべて削除したいと思います。つまり、b_100 b_101 b_102 b_103 b_104はすべて削除/削除されます。

b_110と同じディレクトリにあるファイルをgrepするには、grepさ​​れていないすべてのエントリを削除してください。

ベストアンサー1

そしてzsh

setopt extendedglob
rm -rf -- ^b_<105-110>

b_名前が10進数で始まり、終了し、値が105から110のファイルとディレクトリを除いて、非表示になっていないすべてのファイルとディレクトリが削除されます。

ファイルのみを削除したい場合b_*:

rm -rf -- b_(*~<105-110>)

~zshグローバルオペレーターですとは別に

またはこれを行うこともできます:

all_b_files=(b_*)
to_exclude=(b_{105..110})
rm -rf -- ${all_b_files:|to_exclude}

そしてksh93またはbash -O extglob(またはzsh -o kshglob):

set -- b_{105..110} # set positional parameters to b_105 b_106...
IFS='|'             # used for joining positional parameters in "$*"
pattern="$*"        # prepare extended ksh glob
IFS=                # empty IFS to prevent splitting
rm -rf -- !($pattern)

おすすめ記事