2017-05-09 12 views
1

我需要編寫一個bash腳本,列出以某個字母開頭的目錄(及其子目錄)中的所有文件,比如A/a。如果文件的內容應該以該字母而不是其名稱開頭,那麼該怎麼辦?列表文件的內容以Bash中的一個字母開頭

+3

你的問題?你已經在這裏待了近3年,你應該知道我們不做你的工作爲你 ;) –

回答

1
grep -rn "^[A|a]" * | awk -F: '$2==1{print $1}' 

grep的遞歸(-r),用於在當前文件夾的圖案^[A|a]。如果找到(不必在第一行),grep輸出將看起來像filname:linenumber:match。使用awk:作爲字段分隔符,對於其中的linenumber爲1(在第一行中找到的匹配,即文件開頭)的情況,打印1st字段即文件名。由於我們給出-n選項,因此grep輸出將包含linenumber。

2

只需擊和globstar選項(shopt -s globstar)使**/*

for file in **/*; do [[ $(< "$file") == [Aa]* ]] && echo "$file"; done 

這遍歷所有文件(和目錄)遞歸和檢查,如果其內容與Aa開始。如果是這樣,文件名將被打印。

它實際上也嘗試將目錄與[Aa]*進行比較,但僅在$file是目錄時才返回$(< "$file")的非成功退出狀態。

或者,不Bashsims,使用find

find . -type f -exec sh -c '[ "$(head -c 1 "$1" | tr A a)" = a ]' _ {} \; -print 

此過濾器文件(-type f),然後產生一個子shell,其中測試"$(head -c 1 "$1" | tr A a)" = a運行(獲取文件的第一個字符,轉勢大寫Aa,與a比較,如果退出狀態成功,則打印文件名。

相關問題