我试图在bash脚本中将参数传递给rm来自动清理系统。例如,我想删除* .doc文件以外的所有内容。所以我写了以下代码。
#!/bin/bash
remove_Target="!*.txt"
rm $remove_Target
然而,输出总是说
rm: cannot remove ‘!*.txt’: No such file or directory
很明显,bash脚本在将变量传递给rm时为我添加单引号。如何删除单引号?
答案 0 :(得分:2)
假设我们有一个包含三个文件的目录
$ ls
a.py b.py c.doc
删除除*.doc
以外的所有内容:
$ shopt -s extglob
$ rm !(*.doc)
$ ls
c.doc
!(*.doc)
是一个扩展的shell glob或extglob
,它匹配除.doc
之外的所有文件。
extglob功能需要现代bash
。
可替换地:
find . -maxdepth 1 -type f ! -name '*.doc' -delete