![删除 bash 中除某些文件之外的所有文件,而无需 cd 到目录?](https://linux22.com/image/1378582/%E5%88%A0%E9%99%A4%20bash%20%E4%B8%AD%E9%99%A4%E6%9F%90%E4%BA%9B%E6%96%87%E4%BB%B6%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%20cd%20%E5%88%B0%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我需要每天清理下载目录。
我已看到这个问题并测试了答案
rm !("test 1"|"test 4")
它工作得很好,但需要先 cd 到目录。由于我的应用程序在很多部分需要高于两个目录,所以我不想做类似的事情
cd /app/download
rm !("test 1"|"test 4")
cd ../..
我努力了
rm !("./app/download/test 1"|"./app/download/test 4")
但是,它删除了上层目录的内容,而不是下载/
答案1
您几乎已经到达:
shopt -s extglob # ← 仅当你尚未启用时才需要 rm./app/download/!("测试 1"|"测试 4")
将!(…)
使用除 中文件之外的所有文件的完整路径进行扩展。由于您在 的参数前加上了路径!(…)
前缀,因此不会删除该目录之上的其他文件。rm
./app/download/