【问题标题】:Catch "rm: fts_read: No such file or directory" error and continue捕获“rm:fts_read:没有这样的文件或目录”错误并继续
【发布时间】:2018-08-19 21:27:30
【问题描述】:

我把我的 Macbook 搞砸了。我将一些 Time Machine 备份从我的外部驱动器移动到 Trash 并很快意识到这是一个可怕的错误。我不能把它们放回去,也不能删除它们。到目前为止,我一直在运行 rm 和一个名为 bypass 的辅助函数,它允许我绕过 Apple 对删除备份的保护。

无论如何,我有一个命令

sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass rm -rfv /Volumes/*/.Trashes

为了简洁可以简称为

sudo bypass rm -rfv /Volumes/*/.Trashes

不断被rm: fts_read: No such file or directory 打断。我认为 fts_read 本质上是一个 UNIX 内核函数,它进入文件空间并在非常冗长的递归 rm 调用期间作为文件读取。所以我想抓住fts_read 并重新启动我的sudo bypass rm -rfv /Volumes/*/.Trashes。我不太了解 bash,但这是我的一些想法的伪代码:

try:
  sudo bypass rm -rfv /Volumes/*/.Trashes
except 'rm: fts_read: No such file or directory':
  sudo bypass rm -rfv /Volumes/*/.Trashes

基本上现在我每次收到错误时都会手动重新启动命令,但是这个过程需要几十个小时,所以如果它能够自行重新启动就好了。

【问题讨论】:

  • 你最后是怎么解决的?
  • 我不确定,但也许可以尝试将您的命令包装在 python 之类的东西中?这样你就可以使用 try/catch 并且仍然使命令行 exec 调用 @ebaynaud

标签: bash macos unix rm


【解决方案1】:

一个可能的选项可能是需要前一个命令失败的 while 循环?示例:

counter=0
cd "not a real place" #get the initial error code
while [[ $? -ne 0 ]]; do
    echo 'words'
    (( counter++ ))
    (( counter > 10 ))
done

这将一直持续到(( counter > 10 )) 返回 0,即计算结果为真。你应该可以用你的命令做类似的事情:

sudo bypass rm -rfv /Volumes/*/.Trashes
while [[ $? -ne 0 ]]; do
    sudo bypass rm -rfv /Volumes/*/.Trashes
done

我怀疑这是一个好的解决方案,但它是一个解决方案。

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2022-12-16
    • 2013-08-08
    • 2013-11-04
    • 2012-02-18
    • 2012-10-21
    • 2011-03-22
    • 2015-12-29
    相关资源
    最近更新 更多