Python 强制移动(未复制)的文件继承同一文件系统上父文件夹的权限

Python 强制移动(未复制)的文件继承同一文件系统上父文件夹的权限,python,bash,permissions,chmod,Python,Bash,Permissions,Chmod,我希望在同一个文件系统中从一个共享目录(“源”)到一个处理目录(“目标”)并最终到存储,能够mv非常大(10s GB到1TB)的视频文件(以及成批的视频文件)。这些文件来自我们网络上的各种来源,但通常是执行任务的用户(www-data)不会自动拥有对这些文件的写入权限 源目录和目标目录都在RAID上,我正在运行Ubuntu 16.04,将来可能会在Mac上运行 我(在Ubuntu上)有: 设置源目录和目标目录的ACL,使新文件获得777权限,并将所有者/组设置为www-data 设置mask以

我希望在同一个文件系统中从一个共享目录(“源”)到一个处理目录(“目标”)并最终到存储,能够
mv
非常大(10s GB到1TB)的视频文件(以及成批的视频文件)。这些文件来自我们网络上的各种来源,但通常是执行任务的用户(
www-data
)不会自动拥有对这些文件的写入权限

源目录和目标目录都在RAID上,我正在运行Ubuntu 16.04,将来可能会在Mac上运行

我(在Ubuntu上)有:

  • 设置源目录和目标目录的ACL,使新文件获得777权限,并将所有者/组设置为
    www-data
  • 设置
    mask
    以对创建的任何文件授予
    rwx
  • chown
    chgrp
    源和目标到
    www-data
我知道:

  • 我可以使用
    cp--no preserve=all

  • 我可以使用rsync[…]chmod=ugo+rwx[…]

  • 每次我有东西需要转移时,我都可以
    sudo chmod

但这里的要点是尽量避免复制这些巨大的文件。这些脚本主要运行在一个webapp(因此
www-data
user)后面
mv
似乎无法在移动文件时更改文件的权限(我知道为什么您希望将其作为默认行为),但是否有其他方法需要我探索

webapp是python(使用Flask)的,是否有一些python方法我可能没有见过(
os.chmod()
get permission denied)

谢谢

编辑: 下面是源目录上的
getfacl

# file: raid_share/
# owner: root
# group: www-data
# flags: ss-
user::rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx
# file: test_05034/
# owner: myuser
# group: www-data
# flags: -s-
user::rwx
user:myuser:rwx         #effective:r-x
group::rwx          #effective:r-x
group:www-data:rwx      #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx
以下是由SFTP(用户将文件发布到服务器的合理方式)发送到服务器源目录的目录上的
getfacl

# file: raid_share/
# owner: root
# group: www-data
# flags: ss-
user::rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx
# file: test_05034/
# owner: myuser
# group: www-data
# flags: -s-
user::rwx
user:myuser:rwx         #effective:r-x
group::rwx          #effective:r-x
group:www-data:rwx      #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx
getfacl
在该目录中的文件上:

# file: test_05034_r1.mov
# owner: myuser
# group: www-data
user::rw-
user:myuser:rwx         #effective:rw-
group::rwx          #effective:rw-
group:www-data:rwx      #effective:rw-
mask::rw-
other::rw-

我的大脑快融化了

如果我正确理解了您的问题和详细信息,那么当您将它们直接移动到目标时,您似乎真的希望确保它们具有写访问权限

假设这是正确的,而不仅仅是移动文件,移动和设置可写如何?比如:

$ chmod 664 "$file"
$ mv "$file" new folder/.

那么ACL方法有什么问题呢?如果设置正确,即使使用
mv
也应该可以。@l'l我在
mv
上看到的所有内容都表明它将保留源文件权限,而不考虑任何ACL条目。那不是真的吗?我当然不能让它采用目的地
掩码
或其他ACL设置。也许可以查看一下,这可能会提供一些有用的信息。我看到了,但我不确定它是否适用,我必须更仔细地查看它。它似乎与在目录中创建而不是移动的文件有关。我用各种文件/dir的
getfacl
输出更新了这个问题。谢谢先更改文件的权限,然后修改它们,怎么样?从您的getfacls输出来看,问题似乎在于它们只是带有owner/group/other的read和execute权限,而您确实需要读写。是这样吗?。。。是的,但是
www-data
用户不能只对其没有写访问权限的文件执行
chmod
。我真正关心的是
www-data
用户或组在文件复制(或FTPed)到服务器时具有写访问权限(因为在我的脚本中,稍后他们将对所有内容执行chmod 664)。任何不存储我的脚本根密码就可以到达的东西都可以。@camposquinn您所有的文件都是通过SFTP来的,还是仅仅通过FTP、http等?也就是说,是什么在处理那个片段呢?www数据是运行脚本的用户吗?也就是说,试图进行移动?文件传输可能是通过SFTP进行的。我正在考虑放弃它,转而使用一个
rsync
守护进程,它可以在传输过程中设置权限:
rsync--chmod=ugo+rw[etc]
。这就是说,能够
mv
服务器上已有的文件,并让它们根据ACL规则继承权限将是理想的。。。。是的
www-data
正在运行脚本。