我正在尝试弄清楚我在* nix中的老技能。
我想要实现的是删除每个不包含特定单词的文件夹。
这是清单
➜ myfolder: pwd
/user/myfolder
➜ myfolder: ll locale
drwxr-xr-x 3 user staff 102 23 Oct 11:13 bn_BD
drwxr-xr-x 3 user staff 102 23 Oct 11:13 bn_IN
drwxr-xr-x 3 user staff 102 22 Oct 19:03 en_CA
drwxr-xr-x 8 user staff 272 9 Dec 16:10 en_US
drwxr-xr-x 3 user staff 102 22 Oct 19:03 es
drwxr-xr-x 3 user staff 102 21 Oct 13:18 fr
drwxr-xr-x 3 user staff 102 23 Oct 11:13 pt
drwxr-xr-x 3 user staff 102 21 Oct 13:18 ru
drwxr-xr-x 3 user staff 102 21 Oct 13:18 th_TH
现在我要删除除en_US之外的所有内容
我不知道命令中没有什么
rm -rf locale/[!somethinghere]
借助GNU find(可能还有其他版本),您可以使用感叹号来反向搜索-这样,它将查找并删除当前目录中除“ en_us”之外的所有内容:
find . ! -name 'en_US' -delete
## If you only want to delete directories:
find . -type d ! -name 'en_US' -delete
## If you *don't* want recursiveness:
find . -maxdepth 1 -type d ! -name 'en_US' -delete
## If you want to avoid deleting dotfiles:
find . -maxdepth 1 -type d ! -name 'en_US' -a ! '.*' -delete
某些版本的find
没有此-delete
选项;相反,您可以使用以下之一:
find . -maxdepth 1 -type d ! -name 'en_US' -exec rm -r '{}' +
find . -maxdepth 1 -type d ! -name 'en_US' -a ! '.*' -exec rm -r '{}' +
另外,由于您在评论中提到您拥有zsh,
setopt extendedglob ## this may already be set in you .zshrc
rm ^*en_US*
## If you only want to delete directories:
rm ^*en_US*(/)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句