如何根据名称和日期删除文件夹组

yel*_*von 5 centos shell-script

我有一个这样的文件夹结构。

folders
    test1
    test2.1
    test49.85
    test4.95.89
    sample
    support
    util
Run Code Online (Sandbox Code Playgroud)

这些都是文件夹。我需要删除所有以 test 开头的文件夹,最近的文件夹除外。我也可以访问最新 ${newestTestFolder} 的文件夹名称。

Dan*_*son 4

在 Bash 中使用extglob

$ ls -1
sample
support
test1
test2.1
test4.95.89
test49.85
util
$ newestTestFolder="test49.85"
$ shopt -s extglob
$ ls -d1 !(@(${newestTestFolder}|!(test*)))
test1
test2.1
test4.95.89
Run Code Online (Sandbox Code Playgroud)

这表明

$ rm -r !(@(${newestTestFolder}|!(test*)))
Run Code Online (Sandbox Code Playgroud)

在 Bash 中(启用extglob)在单个命令中完成您想要的操作 - 没有额外的进程调用(好吧,rm)。

Bash 手册中对该模式进行了解释,其含义是

  • !()-不是里面的模式
  • @()-内的图案之一
  • |- 分离图案