0

我在脚本的参数化版本中运行了以下命令:

Script1 as

Nooffiles=`find $1 -mmin $2 -type f -name "$3"|wc -l`
if test $Nooffiles -eq 0
then
exit 1
else
echo "Successful"
find $1 -mmin $2 -type f -name "$3" -exec mv '{}' $4 \;
fi

script1 工作正常。它将文件从 $1 目录移动到 $4。但是在将文件移动到新目录之后,我必须运行另一个像这样的脚本:

Script2 as

for name in `find $1 -type f -name "$2"`
do
filename=`ls $name|xargs -n1 basename`
line=`tail -1 $filename | sed "s/Z/Z|$filename/"`
echo $line >> $3;
echo $filename | xargs -n1 basename;
done

在这里,script2 正在从上一个脚本 script1 将文件移动到的目录中读取。它们存在于该目录中,因为之前的移动脚本运行良好。'ls' 命令显示它们。但是上面的 script2 说:

File.txt: No such file or directory

尽管 ls 在目录中显示了它们,但我收到了这样的错误消息。

请帮忙。

4

1 回答 1

1

您的脚本确实是一团糟,请注意,您永远不应该解析文件名(例如来自 的输出ls,或者find没有-print0选项)。请参阅Bash 陷阱 #1

除此之外,我认为问题在于,在您的循环中,您截断了findwith输出的文件名basename,然后tail使用基本文件名作为参数调用,其中文件实际上并不位于当前文件夹中。

我不明白你在那里做什么,但这是一些更正确的代码,可能在你想要的旁边:

find "$1" -type f -name "$2" -print0 | while read -d '' name
do
    filename=`basename "$name"`
    tail -1 "$name" | sed "s/Z/Z|$filename/" >> "$3"
    echo "$filename"
done

但是,这个脚本仍然存在缺陷。从find. 例如,如果您的文件名包含sed. 或者,如果在某个时候$filename--helpetc.etc.etc。

于 2011-12-16T14:56:44.577 回答