我的 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
输出。