Ketika Anda menyalin menggunakan cp -a source/* target/Anda menyalin sebagian besar file dan direktori dari sourceke target. Khususnya, item yang dikecualikan mungkin akan menjadi file yang dimulai dengan titik ( .) di tingkat atas source.
Pertimbangkan file-file ini (atau direktori) di source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will not be copied
Ketika Anda menyalin menggunakan cp -a source/. target/Anda menyalin seluruh konten source, termasuk item yang dimulai dengan titik ( .) ketarget
Pertimbangkan file-file ini (atau direktori) di source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will be copied
Jika Anda menggunakan bash,, zshAnda dapat menggunakan dotglobopsi untuk mengubah arti *sehingga menyertakan file dan direktori yang dimulai dengan titik ( yashjuga memiliki dotglobopsi; namun, ia kemudian menyertakan .dan ..dalam ekspansi glob yang membatasi kegunaannya. Lihat juga FIGNORE='@(.|..)'dalam ksh93).
Menariknya, cp -a source/. target/dijamin tidak akan pernah membuat komponen target/source. (Di sisi lain, cp -a source target/akan melakukan salah satu dari dua hal tergantung pada apakah targetsudah ada atau tidak . Lihat Cara menyalin folder secara rekursif dengan cara idempoten menggunakan cp untuk detailnya.)
Ketika Anda menghapus menggunakan rm -rf source/*Anda menghapus file dan direktori di dalamnya sourceyang tidak dimulai dengan titik ( .). Tunduk pada dotglobpengaturan yang telah saya sebutkan. Itu tidak akan menghapus direktori sourceitu sendiri.
Ketika Anda mencoba menghapusnya, rm -rf source/.ia akan gagal - seperti yang sudah dijelaskan orang lain - karena POSIX melarang penghapusan lintasan yang komponen terakhirnya .atau ... Setara terdekat adalah rm -rf source, yang akan menghapus sourcedirektori dan semua kontennya terlepas dari apakah mereka memulai dengan titik ( .).
It's up to the command whether that trailing dot makes any senseUm, titik selalu terhubung ke direktori yang berisi itu sendiri, jadi../foldersource/.seharusnya tidak berbeda dengan menyatakan./foldersource/dan sebenarnya itu hanya cara yang berlebihan untuk menyatakan hal yang sama. Tidak ada perintah yang mencoba "memahami" dot atau double dot, karena ini adalah standar pada sistem file Linux / Unix.rmcukup menolak menghapus direktori kerja saat ini seperti yangjimmijdinyatakan dalam jawaban mereka. Perhatikan juga bahwa Anda menggunakan./semua contoh Anda saat OP../ada di sana. Agak dari perbedaan (besar).