一般咱們經過rm -rf *能夠直接強制刪除當前文件夾裏面的全部內容,可是有些時候咱們須要保留一些文件,就好比,網站轉移更新須要保留程序壓縮包等就須要用到在linux centos環境下須要刪除除某(多)個文件以外的全部文件的功能了。具體方法以下:linux
rm -f !(a)shell
若是保留a和b,能夠運行rm -f !(a|b)來實現,不過通常bash中運行後會提示centos
「-bash: !: event not found 」bash
能夠經過運行:shopt -s extglob 來解決。app
set命令能夠用來定製shell環境,使用選項「o」來打開或者關閉選項。例如打開選項:set -o 選項,關閉選項目:set +o 選項。編輯器
例如要打開vi交互式命令行編輯,則以下:函數
[root@localhost ~]# set -o #查看當前設置狀況 |
內置set命令選項ui
選項名 | 快捷開關 | 含義 |
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內置命令將打印一個錯誤消息 |