Di chuyển tệp và thay đổi quyền sở hữu tại thời điểm lấy mẫu


23

Trên Linux (Debian, Ubuntu Mint ...),
có bất kỳ lệnh tùy chọn hoặc thứ gì tôi có thể sử dụng để chuyển tệp sang người dùng khác mà không phải thực hiện:

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

Câu trả lời:


30

Sử dụng rsync(1):

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

4
Cảm ơn @dawud - đây là "thứ tôi không biết hàng ngày và không thể hiểu tôi đã bỏ lỡ nó như thế nào"
Jenny D

1
@JennyD bạn có thể muốn xem qua usermapgroupmapcác tùy chọn là tốt.
dawud

2
Nhưng điều này không phải mvvậy, phải không? Chỉ có bản sao? Hay mvnó?
mikeerv

@mikeerv lưu ý hợp lệ, xem chỉnh sửa của tôi
dawud

11

Mỗi @Kevin trong các bình luận dưới đây, --file - |pipecú pháp là dư thừa. Vì vậy, tôi đã loại bỏ nó.

Điều này cũng có thể được thực hiện với tar:

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

Khá chắc chắn rằng -f -được ngụ ý trên cả hai đầu.
Kevin

1
@Kevin Không có ở đây. Đây là quy định.
mikeerv

Có, bạn đã chỉ định nó, nhưng nó không cần thiết. Lệnh của bạn hoạt động tốt mà không có f -phần.
Kevin

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

Có cùng độ dài với các câu trả lời khác và lưu ý vì tất cả đều sử dụng cùng một cuộc gọi thư viện dưới mui xe, tất cả đều thực hiện chính xác cùng một điều - trừ khi, như Gilles lưu ý, đây là trên cùng một hệ thống tệp và thiết bị , trong trường hợp đó mvthực sự là một sự đổi tên, làm cho nó hiệu quả hơn rsynchoặc tar.


Nó không phải là một :thay vì .khi làm việc với chown?
Kiwy

2
Hmmm - thú vị. Đó là cách đó trong trang người đàn ông, nhưng tôi đã luôn sử dụng một dấu chấm. Có vẻ như họ đã lấy nó ra khỏi trang man GNU khoảng một thập kỷ trước vì nó không phải là POSIX di động. Vẫn hoạt động mặc dù (với chown từ GNU coreutils trên linux), nhưng tôi sẽ thay đổi điều đó ở trên.
goldilocks

1
chownthường mất cả hai :..
slm

1
Bạn có thể làm điều đó ngắn hơn một chút: nu=unicorn h=/home f=folderfulloffiles ; sudo mv $h/poney/$f $h/$nu/$f ; sudo chown -R ${nu}:$nu $_- mặc dù đó không phải là điểm chính của câu trả lời của bạn, điều này tốt và tôi đã được nâng cao.
mikeerv

3
Giải pháp này có lợi thế là nếu nguồn và đích nằm trên cùng một hệ thống tệp, tệp sẽ được di chuyển thay vì sao chép và xóa bản gốc.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.