Linux
在變數中使用linux’find’命令的多個名稱功能?
我新學會瞭如何使用以下方法搜尋多個文件名
find
:find . \( -iname "*.srt" -o -iname "*.mp4" \)
但在某些情況下,我不得不使用這麼多這樣的過濾器,而那個簡單的命令行變得如此之長:
find . \( -iname "*.srt" -o ......... \)
我可以創建一個變數並在其中添加所有過濾器,然後在 find 命令中再次使用它嗎?謝謝!
使用 GNU 實現
find
,還有另一種搜尋多個文件名的方法:rgx='.*\.srt\|.*\.mp4' find . -iregex "$rgx"
這
\|
是邏輯正則表達式 OR(在預設的 GNU 正則表達式類型中find
,即 emacs 類型)。裸.
表示任何字元。一個點是\.
。您可以定義 a
$rgx_compr
和 a$rgx_media
,然後將其組合:find . -iregex "$rgx_compr" -o -iregex "$rgx_media"
我在這裡省略了括號。
由於您使用的是支持數組變數(即
bash
)的外殼,因此您可以創建一個數組變數並直接使用它。常量表達式
find . \( -iname "*.srt" -o -iname "*.mp4" \) ...
變數表達式
opts=(-iname "*.srt" -o -iname "*.mp4") find \( "${opts[@]}" \) ...
或者
opts=( '(' -iname "*.srt" -o -iname "*.mp4" ')' ) find "${opts[@]}" ...
請注意,數組變數擴展本身必須用雙引號 (
"${opts[@]}"
) 括起來,即使它包含一個或多個項目。如果數組不包含任何項目,它將擴展為空(不是空字元串,""
)。