[英]i want to delete all files via shell except few as but results in Syntax error: "(" unexpected
rm -rf * ! ( "update.sh" | "new_update" ) #or
rm -rf ! ( "update.sh" | "new_update" ) #or
rm -rf ! ( update.sh | new_update ) #or
我想刪除除update.sh
和new_update
之外的所有文件
我已經厭倦了 shell 腳本中的所有行,但返回錯誤
意外的標記 (
當直接在終端上運行時,有時會執行,有時會出現與上述相同的錯誤
首先,您必須啟用擴展通配符
shopt -s extglob
那么你不能在通配符的各個部分之間有空格。
rm -rf !(update.sh|new_update)
您可以使用grep -v
反轉匹配,使用-w
整個單詞和-E
fir 正則表達式能夠添加更多文件。
rm $( printf '%s\n' * | grep -Ewv "update.sh|new_update" )
我不保證它適用於包含空格和其他瘋狂字符的文件名。
需要 gnu 擴展的更安全的選項是:( 在此處閱讀更多詳細信息)
printf '%s\0' * | grep -zEv '^(update.sh|new_update)$' | xargs -0 rm --
Ed:作為評論員指責 ls 和 xargs 是“危險的”(這就是原因),我將其保留為記錄。
ls * | grep -Ev "update.sh|new_update" | xargs rm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.