通过目录递归运行带有选项的Perl脚本

时间:2014-01-29 15:09:39

标签: perl shell

给定的是一个包含大量文件的目录。

还给出了一个Perl脚本,我想在目录的每个文件上运行。但是这个Perl脚本有选项。

FILES=absolutepathtomyfiles/*
PROGRAMME=absolutepathtoperlscript/script.pl;
for f in $FILES
do
  if [[ $f == *.txt ]]; then
    absolutepathtoperlscript/script.pl -infile=$f -replace #both necessary options
  fi
done

1 个答案:

答案 0 :(得分:1)

如果文件名中有空格或其他奇怪的字符,则使用for构造时可能会出现问题。你可以这样做:

for file in /absolute/path/to/myfiles/*.txt
do
   [[ -f "$file"  ]] || continue
   /absolute/path/to/perl/script/script.pl -infile="$file" -replace
done

请注意[[ -f "$file" ]] || continue。这表示如果$file不是文件,请跳过该文件。它与此类似:

if [[ -f "$file" ]]
then
    continue;
fi

如果这不起作用,请尝试:

export PS4="\$LINENO: "
for file in /absolute/path/to/myfiles/*.txt
do
   [[ -f "$file"  ]] || continue
   set -xv  # Turn on debugging
   /absolute/path/to/perl/script/script.pl -infile="$file" -replace
   set +xv  # Turn off debugging
done

这将打印出您传递给Perl脚本的确切命令行,并可能帮助您找出问题所在。