Dav*_*vid 17 command-line bash rm
在很多情况下, a 的使用*
几乎是不可避免的——例如,rm -rf *
在一个包含数千个子文件夹和文件的文件夹中。
但是如果您只想从rm
命令中排除一两个文件或文件夹怎么办?我GOOGLE了我的路周围,才发现好像挺复杂的解决方案,find . -depth -not \( -name 'one' -o -name 'two' \
-o -name 'three' \) -exec rm {} \;
如规定在这里。
是否有可能以更简单的方式做到这一点 - 没有绕道而行find
?例如rm -rf --exclude='one' --exclude='two' --exclude='three' *
像在 rsync 或只是rm -rf -e 'one','two','three' *
?
甚至可能排除某些事物的一般可能性*
(因此其他命令,例如cp
, mv
, ... 不必实现自己的命令)?类似的东西*{'one','two','three'}
?
cho*_*oba 36
对于bash有一个叫shell选项extglob
是默认设置为停用,以保持与标准shell语法兼容。Extglob通过额外的运营商如补充语法!()
,?()
,@()
和更多一些。
要打开extglob
,请键入shopt -s extglob
。保持它为当前用户类型打开echo 'shopt -s extglob' >> ~/.bashrc
。
对于 rm 示例:extglob
您可以使用
rm -rf !(one|two|three)
Run Code Online (Sandbox Code Playgroud)