Linux Centos 删除除某(多)个文件之外的所有文件

通常我们通过rm -rf  *可以直接强制删除当前文件夹里面的所有内容,但是有些时候我们需要保留一些文件,就比如,网站转移更新需要保留程序压缩包等就需要用到在linux centos环境下需要删除除某(多)个文件之外的所有文件的功能了。具体方法如下:

rm -f  !(a)

如果保留a和b,可以运行rm -f !(a|b)来实现,不过一般bash中运行后会提示

“-bash: !: event not found ”

可以通过运行:shopt -s extglob 来解决。



set命令可以用来定制shell环境,使用选项“o”来打开或者关闭选项。例如打开选项:set -o 选项,关闭选项目:set +o 选项。

例如要打开vi交互式命令行编辑,则如下:


[[email protected] ~]# set -o   #查看当前设置情况
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off             #关闭中
xtrace          off
[[email protected] ~]# set -o vi   #把vi选项打开
[[email protected] ~]# set -o      #查看当前设置情况
allexport       off
braceexpand     on
emacs           off
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              on                #已经打开
xtrace          off

内置set命令选项

选项名  快捷开关 含义 
allexport  -a  从这个选项中被设置开始就自动标明要输出的新变量或修改过的变量,直至选项被复位 
braceexpand  -B 打开花括号扩展,它是一个默认设置 
emacs    使用emacs内置编辑器进行命令行编辑,是一个默认设置 
errexit -e  当命令返回一个非零退出状态(失败)时退出。读取初始化文件时不设置 
histexpand  -H  执行历史替换时打开!和!!扩展,是一个默认设置 
history    打开命令行历史、默认为打开 
ignoreeof   禁止用EOF(Ctrl+D)键退出shell。必须键入exit才能退出。等价于设置shell变量IGNOREEOF=10 
keyword  -k   将关键字参数放到命令的环境中 
interactive-comments   对于交互式shell,把#符后面的文本作为注释 
monitor -m  设置作业控制 
noclobber -C  防止文件在重定向时被重写 
noexec -n  读命令,但不执行。用来检查脚本的语法。交互式运行时不开启 
noglob  -d  禁止用路径名扩展。即关闭通配符 
notify -b  后台作业完成时通知用户 
nounset -u   扩展一个未设置的变量时显示一个错误信息 
onecmd -t  在读取和执行命令后退出 
physical -P   设置时,在键入cd或pwd禁止符号链接。用物理目录代替 
privileged -p  设置后,shell不读取.profile或ENV文件,且不从环境继承shell函数,将自动为setuid脚本开启特权 
verbose  -v  为调试打开verbose模式 
vi   使用vi内置编辑器进行命令行编辑 
xtrace -x  为调试打开echo模式 
     

shopt命令是set命令的一种替代,很多方面都和set命令一样,但它增加了很多选项。可有使用“-p”选项来查看shopt选项的设置。“-u”开关表示一个复位的选项,“-s”表示选项当前被设置。


[[email protected] ~]# shopt -p    #查看当前设置情况
shopt -u cdable_vars
shopt -u cdspell
shopt -u checkhash
shopt -s checkwinsize
shopt -s cmdhist
shopt -u dotglob
shopt -u execfail
shopt -s expand_aliases
shopt -u extdebug
shopt -u extglob
shopt -s extquote
shopt -u failglob
shopt -s force_fignore
shopt -u gnu_errfmt
shopt -u histreedit
shopt -u histappend
shopt -u histverify
shopt -s hostcomplete
shopt -u huponexit
shopt -s interactive_comments
shopt -u lithist
shopt -s login_shell
shopt -u mailwarn
shopt -u no_empty_cmd_completion
shopt -u nocaseglob
shopt -u nullglob
shopt -s progcomp
shopt -s promptvars
shopt -u restricted_shell
shopt -u shift_verbose
shopt -s sourcepath
shopt -u xpg_echo

[[email protected] ~]# shopt -s cdspell   #把cdspell选项打开
[[email protected] ~]# shopt -p cdspell   #打印cdspell设置
shopt -s cdspell
[[email protected] ~]# cd /raot           #故意拼写错误
/root
[[email protected] ~]# pwd                #查看当前目录
/root
[[email protected] ~]# cd /usr/loca/bin   #故意拼写错误
/usr/local/bin
[[email protected] bin]# pwd              #查看当前目录   
/usr/local/bin
[[email protected] bin]# shopt -u cdspell #把cdspell选项打开
[[email protected] bin]# shopt -p cdspell #打印cdspell设置
shopt -u cdspell
[[email protected] bin]# cd /raot         #故意拼写错误
-bash: cd: /raot: 没有那个文件或目录     #进入目录错误

shopt命令选项

选项 含义 
cdable_vars 如果给cd内置命令的参数不是一个目录,就假设它是一个变量名,变量的值是将要转换到的目录
cdspell 纠正cd命令中目录名的较小拼写错误。检查的错误包括颠倒顺序的字符,遗漏的字符以及重复的字符。如果知道一处修改,正确的路径就打印出,命令将继续。只用于交互式shell
checkhash bash在试图执行一个命令前,先在哈希表中寻找,以确定命令是否存在。如果命令不存在,就执行正常路径搜索
checkwinsize bash在每个命令后检查窗口大小,如果有必要,就更新LINES和COLUMNS的值
cmdhist bash试图将一个多行命令的所有行保存在同一个历史项中。这使得多行命令的重新编辑更方便
dotglob bash在文件名扩展的结果中包括以点(.)开头的文件名
execfail 如果一个交互式shell不能执行指定给exec内置命令作为参数的文件,它不会退出。如果exec失败,一个交互式shell不会退出 
expand_aliases  别名被扩展。默认为打开 
extglob 打开扩展的模式匹配特征(正常的表达式元字符来自Korn shell的文件名扩展) 
histappend  当shell退出时,历史清单将添加到以HISTFILE变量的值命名的文件中,而不是覆盖文件 
histreedit  如果readline正被使用,用户有机会重新编辑一个失败的历史替换 
histverify 如果设置,且readline正被使用,历史替换的结果不会立即传递给shell解析器。而是将结果行装入readline编辑缓冲区中,允许进一步修改 
hostcomplete  如果设置,且readine正被使用,当正在完成一个包含@的词时bash将试图执行主机名补全。默认为打开 
huponexit  如果设置,当一个交互式登陆shell退出时,bash将发送一个SIGHUP(挂起信号)给所有的作业 
interactive_comments  在一个交互式shell中,允许以#开头的词以及同一行中其他的字符被忽略。默认为打开 
lithist  如果打开,且cmdhist选项也打开,多行命令将用嵌入的换行符保存到历史中,而无需在可能的地方用分号来分隔 
mailwarn  如果设置,且bash用来检查邮件的文件自从上次检查后已经被访问,将显示消息“The mail in mailfile has been read” 
nocaseglob  如果设置,当执行文件名扩展时,bash在不区分大小写的方式下匹配文件名 
nullglob 如果设置,bash允许没有匹配任何文件的文件名模式扩展成一个空串,而不是它们本身 
promptvars  如果设置,提示串在被扩展后再经历变量和参量扩展。默认为打开 
restricted_shell  如果shell在受限模式下启动就设置这个选项。该值不能被改变。当执行启动文件时,不能复位该选项,允许启动文件发现shell是否是受限的 
sourcepath 如果设置,source内置命令使用PATH的值来寻找包含作为参数提供的文件的目录。默认为打开 
source  点(.)的同义词 
shift_verbose 如果该选项设置,当移动计数超过位置参量个数时,shift内置命令将打印一个错误消息 

原文地址:https://www.cnblogs.com/caicaizi/p/9643902.html

时间: 2024-08-29 23:14:56

Linux Centos 删除除某(多)个文件之外的所有文件的相关文章

centos 删除指定文件之外的其他文件

linux下删除指定文件之外的其他文件 一.Linux下删除文件和文件夹常用命令如下: 删除文件: rm file  www.2cto.com 删除文件夹: rm -rf dir 需要注意的是, rmdir 只能够删除 空文件夹. 二.删除制定文件(夹)之外的所有文件呢? 1.方法1,比较麻烦的做法是: 复制需要保留的文件到其他文件夹,然后将该目录删除, 然后将需要保留的移动 回来. mv keep ../ #保留文件(夹) keep rm -rf * #删除当前文件夹里的所有文件 mv ../

linux删除文件夹下除了某一个文件之外的所有文件及find用法

原文: https://www.jb51.net/article/99319.htm 比如一个目录下有1,2,3,4,5这五个文件,现在我需要删除除了2以外的所有文件,那么我可以使用 find . ! -name 2 -exec rm -f {} \; 当然你还可以配合着 -maxdepth 来更精准的删除了. 下面演示删除的范围仅限于当前目录. find . -maxdepth 1 ! -name 2 -exec rm -f {} \; find . -mindepth 3 -maxdepth

Linux删除除了某些文件之外的所有文件(夹)

例如:删除当前目录下除了.tar.gz和.py结尾的其他文件 shopt -s extglob rm -rf !(*.py|*.tar.gz)

rm删除某文件之外的所有文件

1.rm -rf !(1.txt) 删除1.txt之外的所有文档,必须在文件夹内执行 2.rm -rf [^1]* 删除不是1开头之外的文件,不能加'' 3.ls |grep -v '1.txt' |xargs rm 4.find ./ -type f |grep -v '1.txt' |xargs rm 5.find ./ -type f \! -name "1.txt" -exec rm -rf {} \; 原文地址:https://www.cnblogs.com/zhouguan

linux 如何删除文件夹下面的文件和文件夹,只保留两个文件

# 删除目录下那两个文件之外的所有文件 find dir/ -type f ! -name file1 -a ! -name file2 | xargs rm -f # 删除所有空目录(非空目录不会被删除,但是会出错误信息,可以忽略) find dir/ -type d | xargs rmdir -p 使用bash shell删除目录中的特定文件的3种方法_linux shell_脚本之家http://www.jb51.net/article/51575.htm

【Linux】linux中删除指定文件外所有其他文件(夹)的问题

今天碰到要删除指定文件(夹)外的其他文件的问题.网上查到的方法是这样的 需要在当前文件夹中进行: rm -rf !(keep) #删除keep文件之外的所有文件 rm -rf !(keep1|keep2) #删除keep1和keep2文件之外的所有文件 在Ubuntu14.04下有个大坑,keep1和keep2与“|"之间千万不能留空格,就是!(keep1 | keep2).这样的话会删除当前文件夹内的所有文件. 应该这样写(keep1|keep2). 具体原因未知,等慢慢寻找.以后再来补充.

在虚拟机(VMware)中安装Linux CentOS 6.4系统(图解) 转

一.下载最新版本Linux CentOS     1.打开官网地址:http://www.centos.org/,点击Downloads->Mirrors         2.点击CentOS Public Mirror List          3.点击South American, Asian, Oceania, Middle Eastern, African and Other Regional Mirrors(选择你就近镜像)          4.选择离你的地方,点击HTTP   

如何在 Bash 中删除“除某些文件外的所有文件”?

我的一位同事曾经问过我这样一个问题:在 Linux 下,如何 删除目录中除某些文件之外的所有文件?当时,我告诉他可 以通过模式匹配的方法解决.但其实,除此之外,还有其他 的方法,正所谓"条条大路通罗马".让我们来逐一看看. 假设要删除 ~/Downloads 目录中除 *.iso 和 *.zip 外的 所有文件,那么在 bash 中可以按以下方法处理: 方法1:模式匹配法 shopt -s extglob # 确认开启 extglob 选项 cd ~/Downloads rm -v !

rm删除某个文件之外的文件

1.列出排除hns_dsaf_mac.c文件之外的.c文件 ls drivers/net/ethernet/hisilicon/hns/*.c |egrep -v '(hns_dsaf_mac.c)' 2.删除hns_dsaf_mac.c文件之外的.c文件 rm `ls drivers/net/ethernet/hisilicon/hns/*.c |egrep -v '(hns_dsaf_mac.c)'` 原文地址:https://www.cnblogs.com/dakewei/p/985518