Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

通过先复制后删除移动文件 #7701

Closed
4 tasks done
finch71 opened this issue Dec 24, 2024 · 8 comments · Fixed by #7704
Closed
4 tasks done

通过先复制后删除移动文件 #7701

finch71 opened this issue Dec 24, 2024 · 8 comments · Fixed by #7704
Labels
enhancement New feature or request

Comments

@finch71
Copy link

finch71 commented Dec 24, 2024

Please make sure of the following things

  • I have read the documentation.
  • I'm sure there are no duplicate issues or discussions.
  • I'm sure this feature is not implemented.
  • I'm sure it's a reasonable and popular requirement.

Description of the feature / 需求描述

SFTP等存储,无法在跨越文件系统的路径之间rename

Suggested solution / 实现思路

可以通过先复制后删除移动文件。

Additional context / 附件

No response

@finch71 finch71 added the enhancement New feature or request label Dec 24, 2024
Copy link

See

  1. 57% 通过搜索后删除文件 #5292

@pongfcnkl
Copy link

rclone可以实现

@KirCute
Copy link
Contributor

KirCute commented Dec 24, 2024

在同一个文件系统内移动文件是原子操作,能瞬间完成并返回的,跨文件系统移动需要完整复制文件内容,如果文件太大的话客户端就会超时,所以你这个需求只能是把移动操作添加为复制任务,但是复制任务是不支持完成后删除源文件的,不然跨网盘移动也不会提示“使用复制操作”了。因此我建议在这样的场景中使用复制,复制完成后手动删除源文件

@finch71
Copy link
Author

finch71 commented Dec 24, 2024

但是复制也需要花费很长时间,而复制后删除源文件应该也是一瞬间吧?只需要在复制任务上加个flag是不是就可以了。

@KirCute
Copy link
Contributor

KirCute commented Dec 24, 2024

但是复制也需要花费很长时间,而复制后删除源文件应该也是一瞬间吧?只需要在复制任务上加个flag是不是就可以了。

不太行,因为复制文件夹的任务的执行逻辑是,首先在目标位置新建文件夹,然后对于源文件夹的每个子文件/文件夹,创建一个单独的复制任务,最后之间结束。它不会检查这些子项复制任务全部完成的时机然后去删除源文件夹,最后能做到的最好的效果就是在原位置留下目录结构。

我直接把跨文件系统的移动指令当成复制处理算了,本来开源项目就不能保证复制过程是绝对没有问题的,万一复制出来的文件是有问题的,结果它还自动把源文件删了就不好了

@finch71
Copy link
Author

finch71 commented Dec 25, 2024

好像alist的scp/sftp驱动(是client不是server)也不支持通过先复制后删除移动文件?能一起修了么?

@KirCute
Copy link
Contributor

KirCute commented Dec 25, 2024

好像alist的scp/sftp驱动(是client不是server)也不支持通过先复制后删除移动文件?能一起修了么?

那为什么不直接使用复制呢,sftp服务端需要改是因为sftp协议本身不支持复制功能,所以如果不把移动当成复制,使用sftp协议就完全没有办法实现跨文件系统移动的功能,但是sftp驱动没有这个问题,你只需要在web/webdav/ftp/sftp中的任意一端先复制源文件,再把源文件删掉就行了,移动再怎么写最好的效果也就是跟复制一样

@finch71
Copy link
Author

finch71 commented Dec 25, 2024

主要是alist得来回点,分两步总还是有点儿麻烦。。。如果检查了目的地size相同的情况下,总可以安全删除吧?会留下文件夹就先扔那儿也行

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants