【问题标题】:find command moves files but then files become inaccessiblefind 命令移动文件,但随后文件变得不可访问
【发布时间】:2011-12-16 10:34:18
【问题描述】:

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

脚本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

script1 工作正常。它将文件从 $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' 命令显示它们。但是上面的script2说:

File.txt: No such file or directory

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

请帮忙。

【问题讨论】:

  • 您是否从正确的目录读取文件?您是否缺少任何斜线?
  • 你试过 find 的-depth 选项吗?
  • 我什至可以使用 cat 命令从新目录中查看移动文件的输出。 'ls' 也有效。然而 script2 说,它们不存在。对了,什么是-depth选项?
  • -depth 选项告诉find 去“深度优先”。例如,它将找到a/b 然后a 而不是a 然后a/b。例如,要删除 CVS 目录,请使用 find -depth -type d -name CVS -exec rm -rf {} \;:如果不使用 -depth,则会收到有关 CVS: no such file or directory 的警告。
  • 即使使用 -depth 选项,它也不起作用。 Script2 适用于我使用 cat 命令手动在该目录中创建的任何文件,但不适用于使用 Script1 从另一个目录移动的文件

标签: unix find exec ls mv


【解决方案1】:

你的脚本真的很乱,请注意你不应该解析文件名(比如ls的输出,或者find没有-print0选项)。见Bash Pitfalls #1。

除此之外,我认为问题在于,在您的循环中,您使用basename 截断了来自find 的文件名输出,但随后使用基本文件名作为参数调用tail,文件实际上是' t 位于当前文件夹中。

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

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 etc.etc.etc。

【讨论】:

  • 在 script1 中,如果该目录中至少有 1 个文件(基于某些条件),我会将文件从一个目录移动到另一个目录。对于 script2,script1 读取的目录中的每个文件从文件移动到另一个目录,都有一个特殊的属性,它包含混乱的数据,但最后一行就像'Z|1|23|||||',即, Z|number|number||||(后面是一组 | 符号)。最后一行很重要,前几行不重要。我想递归提取所有文件的最后一行,将其更改为 'Z|filename|number|number|||||||'并将所有内容合并到一个文件中。
  • 我不确定问题出在 script1 还是 2,但不知何故它们没有按顺序工作,即运行 script1 然后 script2。
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多