[英]find if filename contains a certain string in bash script
我在目錄中有一堆輸出文件,例如:a.out,b.out c.out等。
我想搜索輸出文件,如果輸出文件名包含某個字符串(例如“a”),那么它會將相應的輸出文件“a.out”打印到屏幕上。
在我進入輸出文件目錄后,這是我的代碼:
OUT_FILE="*.out"
OT=$OUT_FILE
STRING="a"
For file in "$OT";do
if [[$file == *"$STRING"*]];then
echo $file
fi
done
我收到的錯誤是[[* .out:命令未找到。 看起來$ file被解釋為$ OT,而不是與$ OT匹配的單個文件。
但是當我刪除if語句並且只是執行for循環來回顯每個$文件時,輸出給了我所有以.out結尾的文件。
願意幫助理解我做錯了什么。 提前致謝。
在[[
和之前]]
之后你需要空格:
for file in *.out;do
if [[ "$file" == *"$STRING"* ]];then
printf '%s\n' "$file"
fi
done
要不就
for file in *"$STRING"*.out; do
printf '%s\n' "$file"
done
要么
printf '%s\n' *"$STRING"*.out
沒有[[
(適用於任何Bourne-heritage shell)這樣的bashisms,因為它不會派生任何實用程序:
for file in *.out; do
case $file in
(*a*) printf '%s\n' "$file";;
esac
done
如果您願意,可以用(*$STRING*)
替換(*a*)
(*$STRING*)
。
如果你有一個了解-maxdepth 1
的find
,請-maxdepth 1
:
find . -maxdepth 1 -name \*"$STRING"\*.out
PS:你的問題有點不清楚。 您發布的代碼在文件名中測試a
(我的代碼也是如此)。 但是您的文本建議您要在文件內容中搜索a
。 這是什么? 你能澄清一下嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.