![Bash 腳本尋找目錄中檔案的內容並新增值](https://rvso.com/image/1490209/Bash%20%E8%85%B3%E6%9C%AC%E5%B0%8B%E6%89%BE%E7%9B%AE%E9%8C%84%E4%B8%AD%E6%AA%94%E6%A1%88%E7%9A%84%E5%85%A7%E5%AE%B9%E4%B8%A6%E6%96%B0%E5%A2%9E%E5%80%BC.png)
我有一個包含大量文件的目錄。我想寫一個 bash 腳本 -
- 輸入該目錄
- 找出其中哪些是 Perl 腳本(但它們都沒有 .pl 副檔名)
- 在每一行的頂部添加一行(我打算添加新的shebang)如果不是Perl腳本,則不執行任何操作
我無法搜尋 Perl 腳本,嘗試使用 grep 但沒有得到正確的命令。另外,第三步也是我陷入困境的地方。
答案1
要找到perl文件,最多只能用perl本身來判斷。perl-c如果檔案不是正確的 perl 程式碼,則傳回非零退出程式碼,這對於大多數根本不是 perl 的檔案來說絕對是正確的。不幸的是,當它輸入有錯誤的 perl 程式碼時,它會執行相同的操作,並且當檔案實際上不是 perl 程式碼但可以像它一樣無錯誤地解析時傳回 0。如果你可以忍受這種風險,那麼它的核心可能是這樣的:
for FILE in * ; do
if perl -c "$FILE" >/dev/null ; then
sed -i -e '1i#!/usr/bin/perl' "$FILE"
fi
done
備註:一旦我接觸到這些文件,我就會添加 .pl 副檔名,除非有一些非常嚴重的原因導致我盲目。