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


23

在Linux(Debian,Ubuntu Mint ...)上,
是否有任何选项命令或一些我可以用来将文件传输给另一个用户的东西,而不必这样做:

sudo mv /home/poney/folderfulloffiles /home/unicorn/
sudo chown -R unicorn:unicorn /home/unicorn/folderfulloffiles

Answers:


30

用途rsync(1)

rsync \
  --remove-source-files \
  --chown=unicorn:unicorn \
    /home/poney/folderfulloffiles /home/unicorn/

4
谢谢@dawud-这是我每天的“东西,我不知道也不知道我怎么想念它”
Jenny D

1
@JennyD,您可能还想看看usermapgroupmap选项。
dawud 2014年

2
但这不是mv吗?只有副本?还是mv它?
mikeserv 2014年

@mikeserv正确记录,请参阅我的编辑
dawud 2014年

11

根据@Kevin在下面的注释中,--file - |pipe语法是多余的。所以我删除了它。

也可以使用tar以下方法完成此操作:

sudo tar -C${SRC_DIR} --remove-files --group=unicorn --owner=unicorn -c ./* | 
    sudo tar -C${TGT_DIR} -pvx

可以肯定的-f -是在两端都暗示着。
凯文

1
@Kevin不在这里。在这里指定。
mikeserv

是的,您指定了它,但这不是必需的。您的命令不需要任何f -部分就可以正常工作。
凯文

8
s=/home/poney/; f=folderfulloffiles; d=/home/unicorn/ 
sudo mv $s$f $d && sudo chown -R unicorn:unicorn $d$f

大约与其他答案的长度相同,请注意,因为它们都在后台使用相同的库调用,所以它们都在做完全相同的事情-除非像Gilles指出的那样,这是在同一文件系统和设备上,在这种情况下mv实际上是重命名,这使其比rsyncor 更有效tar


这不是一个:,而不是.用打交道时chown
2014年

2
嗯-很有趣 手册页中就是这种方式,但是我一直使用点。好像他们是在十年前将其从GNU手册页中删除的,因为它不是POSIX可移植的。虽然仍然可以工作(使用Linux上GNU coreutils的功能),但是我将在上面进行更改。
goldilocks 2014年

1
chown通常会同时使用:.
slm

1
您可以做的短一些:nu=unicorn h=/home f=folderfulloffiles ; sudo mv $h/poney/$f $h/$nu/$f ; sudo chown -R ${nu}:$nu $_-尽管这几乎不是您回答的重点,这很好,我已经赞成。
mikeserv

3
该解决方案的优势在于,如果源和目标位于同一文件系统上,则文件将被移动而不是被复制,并且原始文件将被擦除。
吉尔(Gilles)'所以
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.