在bash脚本中,如何检查文件是perl脚本?

时间:2016-04-14 06:11:14

标签: linux bash sh

我在目录下有一堆文件。如何查看所有这些内容并确定它是否是perl脚本?(他们不会在文件名中包含.pl)

4 个答案:

答案 0 :(得分:2)

检查shebang

validateUser(User)

通常,大多数命令行脚本都包含shebang,例如

head -n 1 script | grep perl

如果您正在调用此类脚本

,则不需要它们
#!/usr/bin/perl

但如果您想将它们称为系统命令,则可以提供帮助。

答案 1 :(得分:2)

如果您不能依赖有效的shebang,则可以将其传递给perl -c

for f in *; do
    perl -c "$f" 2>/dev/null && echo "$f is Perl"
done

如果您想要正确的机器可读输出,可以将echo切换到printf '%s\0' "$f",以便将其传递给xargs -0和朋友。

这个明显的缺陷是,其中包含错误的Perl脚本将被报告为不是(有效)Perl。

答案 2 :(得分:0)

find ./ -type f -exec egrep -I -l '^use strict;|^use warnings;|^sub |my \$|my \%|my \@|\->{' {} + 2>&1 \
| egrep -v 'README|\.git|\.zsh$|.sh$' \
| xargs file | grep 'ASCII' \
| awk '{print $1}' \
| sed 's/:$//'

不完美,但这会发现大多数文件都带有相对现代的Perl5代码

答案 3 :(得分:-1)

由于他们没有扩展名,请尝试:

find /path/to/directory/ -type f | while read line; do if file -b "$line" | grep -i perl -q; then echo "$line is a perl file"; fi; done
相关问题