Katakanlah saya punya direktori /hello
.
Lalu saya lakukan mv /hello /hello2
.
Apakah saya pindah /hello
ke /hello2/hello
? Atau saya pindah /hello
ke /hello2
?
Tampaknya ketika saya melakukan sesuatu seperti ini, saya mendapatkan hasil yang tidak konsisten.
mv
file, ia melakukan hal yang sama.hanya mengganti nama.tetapimv
dengan direktori Tidak baik menghapus seluruh direktori dengan subdirektori karena satumv
perintah yang tidak aman. jadi dipindahkan sebagaitest1/test2
. tetapi jika Anda masih ingin mencapai itu menulisalias
yang memeriksa apakah parameter yang diberikan adalah direktori dan kemudian lakukan rm -rf direktori dan gunakanmv
perintah tetapi gunakan dengan risiko Anda sendiri./hello
dan/hello2
direktori, maka saya perhatikan itucp /hello /hello2
adalah salah satu yang tidak konsisten. Bergantung pada kombinasi dari garis miring yang ada, terkadang konten/hello
disalin ke dalamnya/hello2
, dan terkadang direktori itu sendiri disalin.Jawaban:
mv a b
mencoba untuk pindaha
keb
apakahb
direktori atau symlink ke direktori. Jika tidak, itu akan mengubah nama (atau menyalin dan menghapus jika pada sistem file yang berbeda)a
menjadib
.Untuk mendapatkan hasil yang konsisten untuk memindahkan file ke direktori, Anda dapat melakukan:
atau
Jika
dir
tidak ada, Anda akan mendapatkan kesalahan, dan itu tidak akan diubah namanyafile
menjadidir
.Jika, di sisi lain, Anda ingin melakukan
rename
tanpa harus khawatir jika file tujuan ada sebagai direktori atau tidak, dengan GNU mv, Anda dapat melakukan:Dalam hal ini,
file
tidak akan dipindahkan kedest
jikadest
direktori. Namun, jika keduanyafile
dandest
merupakan direktori dandest
kosong,file
akan diubah namanya menjadidest
(dan yang aslidest
dihapus). Jika keduanya direktori dandest
tidak kosong,mv -T
akan mengeluh.Sama, jika
file
dandest
yang tidak direktori (dan itu termasuk symlink termasuk symlink ke direktori),file
akan diubah namanya menjadidest
(meskipun Anda akan mendapatkan prompt jika Anda tidak memiliki izin untuk menulisdest
), dan aslidest
akan dihapus. Ada perbedaan denganmv file dest
di manadest
symlink ke direktori. Dengan-T
,file
diubah namanya menjadidest
, tetapi tanpa-T
,file
dipindahkan ke direktori yang ditunjuk olehdest
.Jadi singkatnya, setelah itu
mv -T file dest
, apakahfile
akan diubah namanya menjadidest
atau Anda akan mendapatkan pesan kesalahan (atau prompt). Jika perintah berhasil, yang aslidest
, jika ada sebelumnya akan dihapus.sumber
Ini sepenuhnya tergantung pada apakah sudah ada direktori bernama '/ hello2' yang sudah ada atau tidak.
Jika / hello2 ada DAN adalah direktori, maka move akan selalu pindah / hello ke / hello / hello2
Jika / hello2 tidak ada, maka pindah akan selalu mengganti nama / hello ke / hello2
Jika / hello2 ada DAN adalah file, Anda akan mendapatkan kesalahan, "tidak dapat menimpa 'hello2' tanpa direktori dengan direktori 'hello'.
sumber
Saya mencoba ini
harap ini menjelaskan semuanya.
-v
adalah mode verbose.sumber