我有一个包含大量文件的目录。我想编写一个 bash 脚本来 -
- 进入该目录
- 找出其中哪些是 Perl 脚本(但是都没有 .pl 扩展名)
- 在每一行顶部添加一行(我打算添加一个新的shebang)如果不是Perl脚本,则不执行任何操作
我无法搜索 Perl 脚本,尝试使用 grep 但没有得到正确的命令。另外,第三步也是我卡住的地方。
答案1
查找perl文件最多只能使用perl本身来判断。perl-c 语言如果文件不是正确的 perl 代码,则返回非零退出代码,这对于大多数非 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 扩展名,除非有真正严重的理由不予承认。