Saya memiliki sebuah symlink penting direktori. Saya ingin menyingkirkan itu symlink, sambil menjaga direktori di balik itu.
Aku mencoba rm
dan mendapatkan kembali rm: tidak dapat menghapus 'foo'
.
Aku mencoba rmdir
dan kembali rmdir: gagal menghapus 'foo': Direktori yang tidak kosong
Saya kemudian berkembang melalui rm -f
, rm -rf
dan sudo rm -rf
Kemudian aku pergi untuk menemukan saya back-up.
Apakah ada cara untuk menyingkirkan symlink dengan membuang bayi dengan air mandi?
# this works
rm foo
# versus
rm foo/
Pada dasarnya, anda perlu untuk memberitahu hal itu untuk menghapus sebuah file, tidak menghapus direktori. Saya percaya perbedaan antara rm
dan rmdir
ada karena perbedaan dalam cara C library memperlakukan masing-masing.
Pada setiap tingkat, yang pertama harus bekerja, sedangkan yang kedua harus mengeluh tentang foo menjadi sebuah direktori.
Jika itu doesn't bekerja seperti di atas, kemudian memeriksa izin anda. Anda perlu menulis izin untuk mengandung direktori untuk menghapus file.
gunakan "unlink" perintah dan pastikan tidak **** memiliki / pada akhir
$ unlink mySymLink
unlink() untuk menghapus nama dari file sistem. Jika nama itu adalah yang terakhir link ke file dan tidak ada proses yang memiliki file membuka file yang dihapus dan ruang itu menggunakan dibuat tersedia untuk digunakan kembali. Jika nama terakhir link ke file tetapi setiap proses masih memiliki file membuka file akan tetap eksis sampai terakhir file descriptor mengacu pada itu ditutup.
Saya pikir ini mungkin akan bermasalah jika saya'm membacanya dengan benar.
Jika nama-nama yang disebut link simbolik link dihapus.
Jika nama-nama yang disebut soket, fifo atau nama perangkat untuk itu dihapus tapi proses yang memiliki objek terbuka dapat terus menggunakannya.
rm harus menghapus link simbolik.
skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$
Asumsi itu benar-benar adalah sebuah symlink,
$ rm -d symlink
Ia harus mencari tahu, tapi karena dapat't we mengaktifkan laten kode yang ditujukan untuk kasus lain yang tidak ada lagi, tetapi yang terjadi untuk melakukan hal yang benar di sini.
Dengan asumsi setup anda adalah sesuatu seperti: ln-s /mnt/bar ~/foo
, maka anda harus mampu melakukan rm foo
dengan tidak ada masalah. Jika anda dapat't, pastikan anda adalah pemilik foo
dan memiliki izin untuk menulis/mengeksekusi file tersebut. Menghapus foo
tidak akan menyentuh bar
, kecuali jika anda melakukannya secara rekursif.
Aku punya masalah ini dengan MinGW (sebenarnya Git Bash) yang berjalan pada Windows Server. Tidak ada saran di atas tampaknya bekerja. Pada akhirnya membuat salinan direktori dalam kasus kemudian dihapus lembut link di Windows Explorer kemudian dihapus item dalam Recycle Bin. Hal itu membuat suara-suara seperti itu menghapus file tetapi tidak't. Jangan membuat cadangan meskipun!