是否有命令在同一驱动器上跨 unRAID 共享移动文件指针?
Is there a command to move file pointers across unRAID shares on the same drive?
我创建了一个 Python 脚本来帮助管理我在 unRAID 服务器上的媒体。新文件会自动转移到一个文件夹中,脚本使用文件夹结构和文件名来确定它们应该移动到哪里,通常是转移到同一驱动器上的另一个共享中。使用 Midnight Commander,这种传输会立即发生。这个过程在资源管理器或我的脚本中使用 shutil.move() 复制文件然后删除原始文件,这对于大文件可能需要很长时间并且还会在驱动器上创建不必要的 read/writes。当在同一共享上传输时,它在 Explorer 和 Python 中都是即时的。
简化的伪代码 - 在此示例中,Transfer 和 TV 共享在同一磁盘上:
from shutil import move
oldPath = r'\NAS\Transfer\incoming\test.mkv'
newPath = r'\NAS\TV\test.mkv'
move(oldPath, newPath)
有没有办法像我假设 MC 那样用 Python 移动文件指针,而不是物理移动文件?
为文件赋予新名称同时将其保存在同一文件系统中的底层接口是 os.rename()
。如果该调用失败,将无法进行就地重命名。
如果您测试过有效的本地重命名是可能的直接在文件服务器上,而不是通过您的网络共享,您可能忽略了网络文件系统的限制(或它是如何配置的;确保从客户端的角度来看源和目标都在同一个安装点下,而不仅仅是服务器的角度)。
我创建了一个 Python 脚本来帮助管理我在 unRAID 服务器上的媒体。新文件会自动转移到一个文件夹中,脚本使用文件夹结构和文件名来确定它们应该移动到哪里,通常是转移到同一驱动器上的另一个共享中。使用 Midnight Commander,这种传输会立即发生。这个过程在资源管理器或我的脚本中使用 shutil.move() 复制文件然后删除原始文件,这对于大文件可能需要很长时间并且还会在驱动器上创建不必要的 read/writes。当在同一共享上传输时,它在 Explorer 和 Python 中都是即时的。
简化的伪代码 - 在此示例中,Transfer 和 TV 共享在同一磁盘上:
from shutil import move
oldPath = r'\NAS\Transfer\incoming\test.mkv'
newPath = r'\NAS\TV\test.mkv'
move(oldPath, newPath)
有没有办法像我假设 MC 那样用 Python 移动文件指针,而不是物理移动文件?
为文件赋予新名称同时将其保存在同一文件系统中的底层接口是 os.rename()
。如果该调用失败,将无法进行就地重命名。
如果您测试过有效的本地重命名是可能的直接在文件服务器上,而不是通过您的网络共享,您可能忽略了网络文件系统的限制(或它是如何配置的;确保从客户端的角度来看源和目标都在同一个安装点下,而不仅仅是服务器的角度)。