rm命令反向选择删除文件
反向删除文件, 参考这篇文章.
http://blog.csdn.net/web_go_run/article/details/46009723
shopt是设置shell的全局选项
shopt -p 打印所有选项
shopt -s 打印已经打开on的选项 | shopt -s extglob 则是打开某个选项(extglob是在shell中可以使用 正则的意思)
shopt -u 显示off选项 | shopt -u extglob 关闭某个选项
shopt -s cdspell 即使拼写错误也可以进入该目录:
==================================================================
有些命令可以一次操作多个文件, 因此可诶使用通配符/正则, 而有些命令则不可以使用通配符, 如 rpm -e ab*(会报错...)
命令中的参数通常使用 [大写单词], 允许使用多个参数或选项的, 用省略号表示:
如: rm [OPTION]... [FILE]...
!!!!!!!!!!!!!!!!!!
因此, 结合上面的两点, 反向删除某个目录下的文件:
rm -rf !(install_flash...)
rm -rf !(file1|file2)
===================================================================
xargs:
根据这个命令的名字, 就可以知道它的含义了:
x: transmit 传递, args: 多个参数, 正是: 向命令(不能带多个参数的命令, 如rpm -e)传递多个参数, 循环遍历处理.
xargs 就相当于一个for循环.
反向删除文件:
ls | grep -v 'install_falsh' | xargs rm -rf
上面的ls命令, 可以用find来代替, 这样就不只是局限在当前目录了:
find /opt/install_flash | grep -v 'install_flash' | xargs rm
===============================================================
!感叹号执行历史命令?
历史命令的倒过来数是从最后一条的-1开始计算. strpos等函数都是这样的;
在历史命令列表中, 从头开始数起, 某一条命令的排序数字是不变的.
感叹后面不能加 空格, 否则, 会认为后面的数字是一个命令, 而报错...
感叹号的作用主要有俩个: [参考文章: https://linux.cn/article-5608-1.html]
-
是执行历史命令: !-1 ==!!,
!str : 历史命令中, 以str开头的命令
!?str?: 用??来表示"引号"包含...
这个配合ctrl+r来调用历史命令... -
是获取上次命令的参数: !^, !command_name:param_num
!!是执行上一次的命令. 这个特别是在"permission denied"的情况下切换root用户执行刚才命令的时候有用!
- 当以普通用户执行系统管理命令的时候, 会受到权限禁止, 这时候,就要切换到root;
- 但是切换到root用户后, 你是无法用ctrl+p, up箭头调出刚才执行的命令的,因为每个账户都有自己的bash_history文件
所以这时候, 可以在切换账户的同时, 附带使用 -c !! (切换root的同时执行刚才普通用户最后执行的命令)
su 如果不加用户名的话, 默认的就是切换到root账户.
如下图所是: if
su命令本身可以有 [options]: -c: --command...
??为什么使用su -c !!命令的时候会提示: "/etc/sudoers" 用户不存在
如下图所示:
- 可以看到参数-c说的是, 只能执行一个单命令 "a single command"
- 也就是说, -c后面只能有一个"参数", 只能有一个空格, 再后面空格后的那个参数就会当做是 "user".
- 因此, 如果你执行的命令中不只 包含 一个空格如 : vi /etc/sudoers, 那么, 它只执行vi命令, 而/etc/sudoers则会被当作用户.
- 所以 如果你要执行像上面的命令时, 要用双引号把命令括起来. 至于使用!! , 要看前面的命令时什么, 根据实际情况, 来决定是否添加双引号.
- 因为shell会首先将命令进行替换, 然后再执行!
===========================================================
除了方向键上,还可以用“!!”代表上一条输入的命令,用这个的好处在于可以将这两个字符放在命令行任何位置以便于构成新的命令。
例如:
$./some-shell-command
$cat !!
则后一条命令就相当于cat ./some-shell-command,这样做比先按方向键上回退一条命令,然后定位到开始,插入cat要快捷得多。