同时移动文件和更改所有权

Kiw*_*iwy 24 linux rename files chown

在 Linux(Debian、Ubuntu Mint...)上,
是否有任何选项命令或我可以用来将文件传输到另一个用户而无需执行的操作:

sudo mv /home/poney/folderfulloffiles /home/unicorn/
sudo chown -R unicorn:unicorn /home/unicorn/folderfulloffiles
Run Code Online (Sandbox Code Playgroud)

daw*_*wud 33

使用rsync(1)

rsync \
  --remove-source-files \
  --chown=unicorn:unicorn \
    /home/poney/folderfulloffiles /home/unicorn/
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@dawud - 这是我每天的“我不知道也无法理解我是如何错过它的东西” (6认同)
  • 但这不会`mv`它,对吧?只能复制吗?或者它是`mv`吗? (2认同)

mik*_*erv 11

根据下面评论中的@Kevin,--file - |pipe语法是多余的。所以我已经删除了它。

这也可以通过tar

sudo tar -C${SRC_DIR} --remove-files --group=unicorn --owner=unicorn -c ./* | 
    sudo tar -C${TGT_DIR} -pvx
Run Code Online (Sandbox Code Playgroud)


gol*_*cks 8

s=/home/poney/; f=folderfulloffiles; d=/home/unicorn/ 
sudo mv $s$f $d && sudo chown -R unicorn:unicorn $d$f
Run Code Online (Sandbox Code Playgroud)

与其他答案的长度大致相同,并且请注意,由于它们都在后台使用相同的库调用,因此它们都在做完全相同的事情——除非,正如 Gilles 指出的那样,这是在相同的文件系统和设备上, 在这种情况下mv实际上是重命名,这使其比rsyncor更有效tar

  • 此解决方案的优点是,如果源和目标位于同一文件系统上,则移动文件而不是复制文件并擦除原始文件。 (3认同)
  • 嗯——有趣。在手册页中就是这样,但我一直使用点。看起来他们从 GNU 手册页 [大约十年前](https://lists.gnu.org/archive/html/bug-coreutils/2005-04/msg00097.html) 中删除了它,因为它不是 POSIX 可移植的。虽然仍然有效(在 Linux 上使用来自 GNU coreutils 的 chown),但我会在上面进行更改。 (2认同)