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)
| 归档时间: |
|
| 查看次数: |
6587 次 |
| 最近记录: |