簡體   English   中英

我想通過 shell 刪除所有文件,除了少數文件,但會導致語法錯誤:“(”意外

[英]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.shnew_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM