我正在尝试将参数传递给bash脚本中的rm,以自动清洁我的系统。例如,我想删除除 *.doc文件以外的所有内容。所以我写了以下代码。
#!/bin/bash
remove_Target="!*.txt"
rm $remove_Target
但是,输出总是说
rm: cannot remove ‘!*.txt’: No such file or directory
显然,Bash脚本将变量传递给RM时为我添加了单引号。我如何删除单引号?
使用bash
假设我们有一个带有三个文件的目录
$ ls
a.py b.py c.doc
删除除 *.doc
以外的所有:
$ shopt -s extglob
$ rm !(*.doc)
$ ls
c.doc
!(*.doc)
是一个扩展的壳球,或 extglob
,它匹配除 .doc
中的所有文件。
ExtGlob功能需要现代bash
。
使用查找
或者:
find . -maxdepth 1 -type f ! -name '*.doc' -delete