Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix “查找”命令移动文件,但随后文件变得不可访问_Unix_Find_Exec_Ls_Mv - Fatal编程技术网

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。