
我位於父目錄中,想要搜尋其中包含短語“GWT”的任何 ODT 檔案(LibreOffice Writer)。
我使用的是 Ubuntu 12.04 桌面。從航廈:
myUser@myMachine:~/sandbox$ pwd
/home/myUser/sandbox
myUser@myMachine:~/sandbox$ ls
cloudflip doctrang eclipse lookslike scripts squirrel warlib
所有這些檔案系統物件(eclipse
、scripts
等)都是資料夾。
myUser@myMachine:~/sandbox$ grep -i -r "GWT" *.odt
grep: *.odt: No such file or directory
我要去哪裡阿耶?先致謝!
答案1
ODT 檔案實際上是 Zip 檔案(請參閱https://stackoverflow.com/questions/4957212/how-does-open-office-compress-its-files)你應該可以使用zipgrep
以下指令來 grep 它們:
find ~/sandbox -name "*.odt" -type f -print0 | xargs -0 zipgrep GWT
答案2
假設您使用 Bash 4,您可以執行以下操作:
shopt -s globstar
grep -i GWT **/*.odt
shopt -u globstar
當 shell 選項戒指球星已設定,**遞歸匹配目前目錄的所有子目錄。第二蕭普特命令取消設定命令;此步驟是可選的。
正如 @vanthome 指出的,grep ODT 檔案不會有任何好處,因為它們實際上是壓縮的。有兩個不方便的地方:
- 這zipgrep命令不接受多個存檔名稱作為參數,因此您必須循環遍歷所有 ODT 檔案。
- zipgrep將只列印匹配的行(可以是非常long 在 ODT 檔案中),因此您仍然不知道哪些檔案包含該字串。
以下可能會達到預期的結果:
shopt -s globstar
for file in **/*.odt; do
unzip -c "$file" | grep -iq GWT && echo "$file"
done
shopt -u globstar
這為了循環遍歷所有子目錄中的所有 ODT 檔案。對於找到的每個文件,它將其內容解壓縮到 STDOUT。然後,grep搜尋所需的字串而不輸出任何內容 ( -q
)。如果找到匹配項,grep傳回 0 並執行邏輯 AND ( ) 後的命令&&
,因此檔案名稱會在終端機上回顯。