這里有一些名字:
El Peulo'Pasa, 范奧德里斯科爾, Mike_Willam
如何通過命令 find 在 bash 中使用 POSIX 過濾包含 ' 的名稱?
如果我使用以下命令,
find . -maxdepth 1 -mindepth 1 -type d -regex '^.*[']*$' -print
Bash 遇到問題,因為語法 ' 會自動將輸入轉換為字串
uj5u.com熱心網友回復:
您根本不需要-regex(這是一個非 POSIX 操作);-name綽綽有余。(-mindepth并且-maxdepth也是 POSIX 標準中不存在的擴展)。
要制作'文字,請將其放在雙引號內,或放在未加引號的背景關系中,并在其前面加上反斜杠:
find . -maxdepth 1 -mindepth 1 -type d -name "*'*" -print
...或 100% 相同但難以閱讀的命令列...
find . -maxdepth 1 -mindepth 1 -type d -name '*'\''*' -print
uj5u.com熱心網友回復:
如果您只是在搜索當前目錄(而不是其子目錄),您甚至不需要find,只需要一個通配符(“glob”)運算式:
ls *\'*
(注意'必須轉義或雙引號,但星號不能。)
如果要對這些檔案進行操作,可以直接使用該通配符運算式:
dosomethingwith *\'*
# or
for file in *\'*; do
dosomethingwith "$file"
done
...或者如果您使用的是 bash,請將檔案名存盤在一個陣列中,然后使用它。這涉及使參考恰到好處,以避免檔案名中的其他奇怪字符(例如空格)出現問題:
filelist=( *\'* )
dosomethingwith "${filelist[@]}"
# or
for file in "${filelist[@]}"; do
dosomethingwith "$file"
done
這里要注意的是,陣列不是POSIX shell 標準的一部分;它們適用于某些 shell(bash、ksh、zsh 等),但不適用于其他 shell(例如 dash)。如果您想使用陣列,請確保使用正確的 shebang 來獲取您想要的 shell(并且不要通過使用 運行腳本來覆寫它sh scriptname)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323958.html
