ubuntu 使用命令行删除指定文件/文件夹以外的所有文件
我有一个文件夹,其中包含许多文件夹和具有以下结构的不同文件:
NASA │ ├── a │ ├── doc1 │ ├── doc2 │ ├── doc3 │ ├── folder1 │ └── folder2 │ ├── b │ ├── doc1 │ ├── doc2 │ ├── doc3 │ ├── folder1 │ └── folder2 │ ├── c │ ├── doc1 │ ├── doc2 │ ├── doc3 │ ├── folder1 │ └── folder2 │ ├─ x ├─ y └─ z
我想删除NASA/
除指定文件夹和文件之外的文件夹 ( )的内容。
例如我想保留a
文件夹、b
文件夹和x
文件。
我试过这个解决方案
:
rm !(a/) -r NASA/
和(在答案解释这里):
find NASA/ -type f ! -iname "x" -delete
但这不是很直接,我必须使用 bash 脚本。
我错过了更简单的方法吗?如何在单个命令中执行此操作?
您可以使用GLOBIGNORE
来设置在通配时将被忽略的名称,然后用于*
匹配所有其他文件/目录:
GLOBIGNORE='a:b:x'; rm -r *
例子:
$ tree . ├── a │ ├── 1 │ ├── 2 │ └── 3 ├── b │ ├── 1 │ ├── 2 │ └── 3 ├── c │ ├── 1 │ ├── 2 │ └── 3 ├── x ├── y └── z /NASA$ GLOBIGNORE='a:b:x' /NASA$ rm -r * /NASA$ tree . ├── a │ ├── 1 │ ├── 2 │ └── 3 ├── b │ ├── 1 │ ├── 2 │ └── 3 └── x
Alternately, you can use find
, from the NASA
directory:
find . -maxdepth 1 ! -name '.' ! -regex '.*/\(a\|b\|x\)$' -exec rm -r {} +
Example:
/NASA$ tree . ├── a │ ├── 1 │ ├── 2 │ └── 3 ├── b │ ├── 1 │ ├── 2 │ └── 3 ├── c │ ├── 1 │ ├── 2 │ └── 3 ├── x ├── y └── z /NASA$ find . -maxdepth 1 ! -name '.' ! -regex '.*/\(a\|b\|x\)$' -exec rm -r {} + /NASA$ tree . ├── a │ ├── 1 │ ├── 2 │ └── 3 ├── b │ ├── 1 │ ├── 2 │ └── 3 └── x
相关文章推荐:
赞 (0)