尽管有错误仍移动目录

尽管有错误仍移动目录

将目录移动到另一个驱动器时,如果过程中出现错误,则不会删除任何内容。我收到此类错误:

mv: cannot stat ‘originaldirectory/longpath/irrelevantfile’: Input/output error

我想mv

  • 重试几次(可能就是这么简单,可能什么也解决不了)
  • 删除已成功移动的文件

这样只有有问题的文件保留在原始文件夹中。

答案1

有比这更好的工具mv。我最喜欢的之一是rsync.

rsync --remove-source-files -avHP /path/to/source/ /path/to/destination/

在实际使用该标志之前先尝试一下它--dry-run,看看如果允许的话它会做什么。或者省略该--remove-source-files标志,使其工作方式更像cp这样mv

rsyncover的优点mv是它是可中断且可重复的。因此,当它因错误而崩溃时,您只需重新启动它即可。或者让它循环运行一会儿:

for try in 1 2 3
do
    rsync --remove-source-files -avHP /path/to/source/ /path/to/destination/ && break

    echo -n 'Pausing...'
    sleep 10 || break
    echo
done

答案2

首先,在目标中重建源的目录树:

cd source
find -type d -exec mkdir -p destination/{} \;

{}中的应该find包含每个目录的相对路径。

然后,检查您在目标中创建的目录树是否正常。并尝试单独移动每个文件:

cd source
find -type f -exec mv {} destination/{} \;

我无法告诉你这有多么潜在的危险。您可能会丢失数据!我不确定如果无法创建文件find该怎么办。stat我的希望是它只会发出一条消息错误并继续。但由于您显然是在尝试从损坏的介质中恢复数据,因此您可能意识到了任何风险。

如果这按预期工作,则源中留下的只是无法移动的目录和文件。如果需要,您可以搜索如何递归地删除空目录(我100%确定之前已经问过这个问题)以使您的分析更容易。

我建议你在损坏的介质中做一个小测试用例。mkdir一些目录,touch一些随机文件,然后尝试这些步骤看看会发生什么。如果您一次在一个目录中执行此操作而不是在根目录中执行此操作,这也可能是一个好主意。


我的意思是,如果你的结构是,例如:

.
├── dir1
│   ├── fileA
│   └── subdir1
│       └── fileB
├── dir2
│   └── fileC
└── dir3
    ├── subdir1
    │   └── fileD
    └── subdir2
        └── fileE

然后运行3次;一旦进入dir1,那么如果一切顺利,则移至dir2、 和dir3,而不是立即执行所有操作.

相关内容