Pindahkan file dan ubah kepemilikan pada waktu yang sama

23

Di Linux (Debian, Ubuntu Mint ...),
Apakah ada perintah opsi atau sesuatu yang dapat saya gunakan untuk mentransfer file ke pengguna lain tanpa harus melakukan:

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

Jawaban:

30

Gunakan rsync(1):

rsync \
  --remove-source-files \
  --chown=unicorn:unicorn \
    /home/poney/folderfulloffiles /home/unicorn/
dawud
sumber
4
Terima kasih @dudud - ini adalah "hal-hal yang saya tidak tahu dan tidak mengerti bagaimana saya melewatkannya"
Jenny D
1
@ Jenny, Anda mungkin ingin melihat usermapdan groupmapopsi juga.
dawud
2
Tapi ini bukan mv? Hanya salinan? Atau apakah mvitu?
mikeserv
@ mikeserv sepatutnya dicatat, lihat edit saya
dawud
11

Per @Kevin di komentar di bawah, --file - |pipesintaksnya berlebihan. Jadi saya sudah menghapusnya.

Ini juga dapat dilakukan dengan tar:

sudo tar -C${SRC_DIR} --remove-files --group=unicorn --owner=unicorn -c ./* | 
    sudo tar -C${TGT_DIR} -pvx
mikeserv
sumber
Cukup yakin -f -ini tersirat di kedua ujungnya.
Kevin
1
@ Kevin Tidak di sini. Di sini ditentukan.
mikeserv
Ya, Anda menentukannya, tetapi itu tidak perlu. Perintah Anda berfungsi dengan baik tanpa f -bagian.
Kevin
8
s=/home/poney/; f=folderfulloffiles; d=/home/unicorn/ 
sudo mv $s$f $d && sudo chown -R unicorn:unicorn $d$f

Tentang panjang yang sama dengan jawaban lainnya, dan perhatikan karena mereka semua menggunakan panggilan pustaka yang sama di bawah tenda, mereka semua melakukan hal yang persis sama - kecuali, seperti yang dicatat Gilles, ini ada pada sistem file dan perangkat yang sama , dalam hal mvini benar - benar sebuah nama baru, yang membuatnya lebih efisien daripada rsyncatau tar.

goldilocks
sumber
Ini bukan :bukannya .ketika berhadapan dengan chown?
Kiwy
2
Hmmm - menarik. Begitulah di halaman manual, tapi saya selalu menggunakan titik. Sepertinya mereka mengeluarkannya dari halaman manual GNU sekitar satu dekade yang lalu karena itu bukan POSIX portable. Masih berfungsi (dengan chown dari GNU coreutils di linux), tapi saya akan mengubahnya di atas.
goldilocks
1
chownbiasanya membutuhkan keduanya :dan ..
slm
1
Anda bisa melakukannya sedikit lebih pendek: nu=unicorn h=/home f=folderfulloffiles ; sudo mv $h/poney/$f $h/$nu/$f ; sudo chown -R ${nu}:$nu $_- meskipun itu bukan inti dari jawaban Anda, mana yang baik dan saya sudah terbalik.
mikeserv
3
Solusi ini memiliki keuntungan bahwa jika sumber dan tujuan berada pada sistem file yang sama, file tersebut dipindahkan daripada disalin dan yang asli dihapus.
Gilles 'SO- berhenti menjadi jahat'