我想为用于备份的目录创建一个清理脚本。
例如:我在一个目录中有 10 个文件,它们在文件名中包含编号
如:
b_100
b_101
b_102
b_103
b_104
b_105
b_106
b_107
b_108
b_109
b_110
Run Code Online (Sandbox Code Playgroud)
我想对目录中从 b_105 到 b_110 的特定文件进行 grep 并删除所有其余文件。意思是 b_100 b_101 b_102 b_103 b_104 都将被移除/删除。
如果我想在像 b_110 这样的目录中搜索一个文件,那么删除所有没有搜索到的内容。
与zsh
:
setopt extendedglob
rm -rf -- ^b_<105-110>
Run Code Online (Sandbox Code Playgroud)
将删除所有非隐藏文件和目录,但名称以b_
十进制数字开头和结尾的文件和目录除外,其值包含在 105 和 110 之间。
如果您只想删除b_*
文件:
rm -rf -- b_(*~<105-110>)
Run Code Online (Sandbox Code Playgroud)
~
是zsh
glob 运算符,用于except。
或者你可以这样做:
all_b_files=(b_*)
to_exclude=(b_{105..110})
rm -rf -- ${all_b_files:|to_exclude}
Run Code Online (Sandbox Code Playgroud)
与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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
404 次 |
最近记录: |