Busybox NAS 设备

Busybox NAS 设备

我的 NAS 设备上周末崩溃了。 IT人员显然/也许没有以正确的方式恢复它? “lost+found”目录中有大约 50,000 个目录,每个目录都有一个数字名称,如“#4289756”。看起来好像所有丢失的文件都在这些目录中,每个文件都有原始日期和所有者信息 (Linux)。我需要整理它们,以便工作人员可以找到它们。

我的目标是将这些文件复制/移动到一个结构中,以便每个员工都有自己的文件夹和自己的文件,并且每个文件夹进一步按月份划分。

该设备本身运行 Busybox,这是一个精简的 Linux 版本,仅支持典型 Bash 命令的子集。我想我可以使用带有“find”命令的脚本按所有者和日期对它们进行排序,然后将其通过管道“-exec cp”发送到适当的位置,但看起来 Busybox 没有这种能力。

这是有人提出的建议,但它假设原始目录具有正确的 UID,但事实并非如此。

cd /lost+found ; for i in *; do USER=`ls -l $i | awk '{print $3}'`; mkdir -p /home/$USER/recovered ; cp -a $i /home/$USER/recovered/$i ; done

答案1

每个设备都有自己的 BusyBox 编译,具有不同的功能集,因此我无法确定您的设备支持哪些功能。如果我理解正确,您有类似 的目录/lost+found/#123456,并且该目录中的每个文件都属于同一用户。这是一个未经测试的脚本,它将这些目录分派到用户的主目录中。我假设您的用户名不包含空格,并且用户的主目录遵循约定/home/$username

cd /lost+found
[ -d /root/recovered ] || mkdir /root/recovered
for d in *; do
  username=$(ls -l "$d" | sed -e 's/^[^ ]  *[0-9][0-9]*  */' -e 's/ .*//' -e q)
  if [ -d "/home/$username" ]; then
    dest=/home/$username/recovered
  else
    homedir=/root/recovered/$username
  fi
  [ -d "$dest" ] || mkdir "$dest"
  cp -Rp "$x" "$dest"
done

这几乎就是您发布的内容,只是您的 awk 命令多次打印文件的所有者。您可以awk '1 {print $3}'像上面那样使用 或 sed。如果您选择了错误的所有权,则要么您ls -ld在实际运行的命令中编写,要么您对情况的描述(“所有丢失的文件都在这些目录中,每个文件都有原始日期和所有者信息”)是错误的。我还使脚本更加健壮,特别是系统用户拥有的文件将被复制到/root/recovered.

如果这对您不起作用,请务必清楚地解释问题所在。复制粘贴任何错误消息或ls输出。

相关内容