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

Jawaban:


30

Gunakan rsync(1):

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

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

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.


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'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.