Unix “查找”命令移动文件,但随后文件变得不可访问
我在脚本的参数化版本中运行了以下命令:Unix “查找”命令移动文件,但随后文件变得不可访问,unix,find,exec,ls,mv,Unix,Find,Exec,Ls,Mv,我在脚本的参数化版本中运行了以下命令: 脚本1作为 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 脚本1运行良好。它将文件从$1目录移动到$4。但在它将文件移动到新目录后,我必须运行另一个脚本,如下
脚本1作为
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
脚本1运行良好。它将文件从$1目录移动到$4。但在它将文件移动到新目录后,我必须运行另一个脚本,如下所示:脚本2作为
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的命令将显示它们。但是上面的脚本2说:
File.txt: No such file or directory
尽管ls在目录中显示了它们,我还是收到了这样一条错误消息。
请帮助。您的脚本真的是一团糟,请注意,您不应该解析文件名(如
ls
的输出,或find
没有-print0
选项)。看
除此之外,我认为问题在于,在循环中,使用basename
截断从find
输出的文件名,然后使用基本文件名作为参数调用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
是--help
等等您是否从正确的目录中读取文件?您是否缺少斜杠?您是否尝试了find的-depth
选项?我甚至可以使用cat命令查看新目录中移动文件的输出ls’也能起作用。然而script2说,它们并不存在。顺便问一下,-depth选项是什么?-depth
选项告诉find
进入“深度优先”。例如,它将查找a/b
然后查找a
,而不是a
然后查找a/b
。例如,要删除CVS目录,可以使用find-depth-typed-name CVS-exec rm-rf{}代码>:如果不使用-depth
,您将收到有关CVS的警告:没有这样的文件或目录
。即使使用-depth选项,它也不起作用。Script2使用cat命令手动处理我在该目录中创建的任何文件,但不使用script1处理从另一个目录移动的文件在script1中,如果该目录中至少有1个文件,我会将文件从一个目录移动到另一个目录(基于某些条件)。对于script2,script1从文件移动到另一个目录中读取的目录中的每个文件都有一个特殊属性,即它包含混乱的数据,但最后一行类似于“Z | 1 | 23 | | | | | | | |号”(后面是一组|符号)。最后一行很重要,前几行不重要。我想递归提取所有文件的最后一行,将其更改为“Z | filename | number | number | | | | | | | | | | | | | |并将所有文件合并到一个文件中。我不确定问题是在script1还是在script2中,但不知何故它们没有按顺序运行,即先运行script1,然后运行script2。