Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 捕获;rm:fts“读取:无此类文件或目录”;出错并继续_Bash_Macos_Unix_Rm - Fatal编程技术网

Bash 捕获;rm:fts“读取:无此类文件或目录”;出错并继续

Bash 捕获;rm:fts“读取:无此类文件或目录”;出错并继续,bash,macos,unix,rm,Bash,Macos,Unix,Rm,我把我的Macbook弄砸了。我将一些Time Machine备份从外部驱动器移到了垃圾桶中,很快意识到这是一个可怕的错误。我不能把它们放回去,也不能删除它们。到目前为止,我一直在运行rm,使用一个名为bypass的助手函数,它允许我绕过苹果删除备份的保护 不管怎样,我有命令 sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass rm -rfv /Volumes/*/.Trashes 为简洁起见,可将其

我把我的Macbook弄砸了。我将一些Time Machine备份从外部驱动器移到了垃圾桶中,很快意识到这是一个可怕的错误。我不能把它们放回去,也不能删除它们。到目前为止,我一直在运行
rm
,使用一个名为
bypass
的助手函数,它允许我绕过苹果删除备份的保护

不管怎样,我有命令

sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass rm -rfv /Volumes/*/.Trashes
为简洁起见,可将其称为

sudo bypass rm -rfv /Volumes/*/.Trashes
这会被
rm:fts\u read:No这样的文件或目录
随机中断。我认为fts_read本质上是一个UNIX内核函数,它进入文件空间,在非常详细的递归
rm
调用中作为文件读取。所以我想捕捉
fts\u 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

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

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

counter=0
cd "not a real place" #get the initial error code
while [[ $? -ne 0 ]]; do
    echo 'words'
    (( counter++ ))
    (( counter > 10 ))
done
这将一直持续到
((计数器>10))
返回0,即计算结果为真。您应该能够使用命令执行类似的操作:

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

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

您最终是如何解决的?我不确定,尽管可能尝试用python之类的东西包装您的命令?这样,您就可以利用try/catch,仍然可以进行命令行
exec
调用@ebaynaud