簡體   English   中英

查找文件名是否包含bash腳本中的某個字符串

[英]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 1find ,請-maxdepth 1

find . -maxdepth 1 -name \*"$STRING"\*.out

PS:你的問題有點不清楚。 您發布的代碼在文件名中測試a (我的代碼也是如此)。 但是您的文本建議您要在文件內容中搜索a 這是什么? 你能澄清一下嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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