バックアップに使用されるディレクトリのクリーンアップスクリプトを生成したいと思います。
例:私のディレクトリには、ファイル名に数字が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)