小编mco*_*awc的帖子

删除脚本中的某些文件/目录;需要修改

我和这个问题有同样的问题如何从文件夹中删除除少数文件夹之外的所有文件/文件夹?几次。这就是我想为命令 rmnot 自己编写脚本的原因。如有必要,即使使用通配符,它​​也应该使用任意数量的文件,并删除同一目录中除这些文件之外的任何内容(非递归)。典型的例子是:

rmnot *tex *bib *png
Run Code Online (Sandbox Code Playgroud)

我的脚本可以工作,但是由于我没有经验并且想以正确的方式学习它,有没有更优雅的方法来编写这个脚本?

#!/bin/zsh

insert="-name . -or -name .."

for i in {1..$#}; do
    insert="$insert -or -name ${(P)i}"
done

insert="\( $insert \)"

eval "find -not $insert -exec rm {} \;"
Run Code Online (Sandbox Code Playgroud)

PS:我必须使用 ZSH,因为${(P)i}我认为其他任何东西都可以在 bash 中使用。

======优化版本======

 #!/bin/bash

 insert="-name . -or -name .."

 for i; do
    insert="$insert -or -name $i"
 done

 insert="\( $insert \)"

 find -maxdepth 1 -not $insert -delete
Run Code Online (Sandbox Code Playgroud)

command-line scripts zsh rm

2
推荐指数
1
解决办法
1643
查看次数

标签 统计

command-line ×1

rm ×1

scripts ×1

zsh ×1