通常我們通過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交互式命令行編輯,則如下:
[root@localhost ~]# set -o #查看當前設置情況 |
內置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模式 |
[root@localhost ~]# shopt -p #查看當前設置情況 [root@localhost ~]# shopt -s cdspell #把cdspell選項打開 |
選項 | 含義 |
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內置命令將打印一個錯誤消息 |