Bash
遞歸對目錄及其子目錄中的所有文件執行操作
基於這個答案,我想對目錄及其子目錄中的所有文件執行操作。
以下命令適用於單個文件,也適用於循環中的多個文件。
for i in *.html; \ do sed -i '/<head>/a <link rel="stylesheet" href="/home/jian/postgres/doc/src/sgml/html/stylesheet.css">\' $i; \ done
但是以下命令將不起作用。
find . -type d -exec \ for i in *.html; \ do sed -i '/<head>/a <link rel="stylesheet" href="/home/jian/postgres/doc/src/sgml/html/stylesheet.css">\' $i; \ done \ \;
它給出了以下錯誤:
bash: syntax error near unexpected token `do' bash: syntax error near unexpected token `done' ;: command not found
我在這裡找到了一個相關的文章。
呼叫目前目錄或以下目錄中名稱匹配的所有正常文件
sed
:find``*.html
find . -name '*.html' -type f -exec sed -i '...expression...' {} +
假設您
sed
在上面的程式碼中正確插入了表達式,這將sed
使用找到的文件的批量路徑名呼叫,確保sed
呼叫的次數盡可能少*。*或者,
shopt -s globstar dotglob failglob sed -i '...expression...' ./**/*.html
這啟用了在路徑名
**
中工作*
但匹配的模式(“遞歸”)。/
它還允許模式匹配隱藏的名稱(就像find
也會這樣做),如果沒有名稱與模式匹配,則告訴 shell 失敗並出現錯誤。這裡的區別在於
- 匹配文件的文件類型未經測試(模式可能匹配目錄等)
- 如果該模式匹配數千個名稱,則該命令將無法執行,並出現“參數列表太長”錯誤。