Pertanyaan Hapus symlink ke direktori


Saya memiliki symlink ke direktori penting. Saya ingin menyingkirkan symlink itu, sambil menyimpan direktori di belakangnya.

Saya mencoba rm dan kembali rm: cannot remove 'foo'.
Saya mencoba rmdir dan kembali rmdir: failed to remove 'foo': Directory not empty
Saya kemudian melangkah maju rm -f, rm -rf dan sudo rm -rf

Lalu saya pergi mencari back-up saya.

Apakah ada cara untuk menyingkirkan symlink dengan membuang bayi dengan air mandi?


904
2017-10-16 20:18


asal


Jawaban:


# this works
rm foo
# versus
rm foo/

Pada dasarnya, Anda perlu memberitahukannya untuk menghapus file, bukan menghapus direktori. Saya percaya perbedaan antara rm dan rmdir ada karena perbedaan dalam cara perpustakaan C memperlakukan masing-masing.

Bagaimanapun, yang pertama harus bekerja, sementara yang kedua harus mengeluh tentang foo menjadi direktori.

Jika tidak berfungsi seperti di atas, maka periksa izin Anda. Anda perlu izin menulis ke direktori yang berisi untuk menghapus file.


1123
2017-10-16 20:22



gunakan perintah "hapus tautan" dan pastikan tidak untuk memiliki / pada akhirnya

$ unlink mySymLink

unlink () menghapus nama dari sistem file. Jika nama itu merupakan tautan terakhir ke file dan tidak ada proses yang dibuka file itu dihapus dan ruang yang digunakan tersedia untuk digunakan kembali.   Jika nama adalah tautan terakhir ke file tetapi proses apa pun masih memiliki file, buka file akan tetap ada sampai file deskriptor terakhir yang merujuk ke file tersebut ditutup.

Saya pikir ini mungkin bermasalah jika saya membacanya dengan benar.

Jika nama yang dimaksud sebagai tautan simbolik, tautan dihapus.

Jika nama merujuk pada soket, fifo atau perangkat, nama untuknya dihapus tetapi proses yang memiliki objek terbuka dapat terus menggunakannya.

https://linux.die.net/man/2/unlink


774
2017-10-16 20:22



rm harus menghapus tautan 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:~$ 

13
2017-10-16 20:24



Dengan asumsi itu sebenarnya adalah symlink,

$ rm -d symlink

Ini harus mencari tahu, tetapi karena itu tidak bisa kita mengaktifkan kode laten yang dimaksudkan untuk kasus lain yang tidak ada lagi tetapi terjadi untuk melakukan hal yang benar di sini.


12
2017-10-16 22:29



Menggunakan rm symlinkname tetapi tidak menyertakan garis miring di bagian akhir (jangan gunakan: rm symlinkname/). Anda kemudian akan ditanya apakah Anda ingin menghapus symlink, y untuk menjawab ya.


11
2017-08-21 21:13



Jika rm tidak dapat menghapus symlink, mungkin Anda perlu melihat izin pada direktori yang berisi symlink. Untuk menghapus entri direktori, Anda perlu izin menulis pada direktori yang berisi.


7
2017-10-16 20:21



Dengan asumsi pengaturan Anda adalah sesuatu seperti: ln -s /mnt/bar ~/foo, maka Anda harus bisa melakukan rm foo tanpa masalah. Jika Anda tidak bisa, pastikan Anda adalah pemilik foo dan memiliki izin untuk menulis / mengeksekusi file. Menghapus foo tidak akan menyentuh bar, kecuali Anda melakukannya secara rekursif.


3
2017-10-16 20:23



Di CentOS, jalankan saja rm linkname dan itu akan meminta untuk "menghapus tautan simbolis?". Mengetik Y dan Memasukkan, tautan akan hilang dan direktori aman.


2
2017-09-17 19:23



Saya memiliki masalah ini dengan MinGW (sebenarnya Git Bash) yang berjalan di Windows Server. Tak satu pun dari saran di atas tampaknya berhasil. Pada akhirnya, buat salinan direktori untuk berjaga-jaga kemudian hapus tautan lunak di Windows Explorer lalu hapus item tersebut di Recycle Bin. Itu membuat suara seperti menghapus file tetapi tidak. Jangan membuat cadangan!


1
2018-01-30 08:39