给定的是一个包含大量文件的目录。
还给出了一个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
答案 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脚本的确切命令行,并可能帮助您找出问题所在。