Hapus symlink ke direktori


1085

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

Saya mencoba rmdan kembali rm: cannot remove 'foo'.
Saya mencoba rmdirdan kembali rmdir: failed to remove 'foo': Directory not empty
saya kemudian berkembang rm -f, rm -rfdansudo rm -rf

Kemudian saya pergi mencari back-up saya.

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


74
apa yang salah dengan mengajukan pertanyaan terkait linux? Terakhir kali saya memeriksa, stack overflow tidak spesifik untuk os
Jeremy Cantrell

6
Bukankah pertanyaan ini lebih cocok untuk Pengguna Super, atau Stack Exchange terkait Linux?
mwfearnley

45
@ mwfearnley Ya, tapi periksa tanggalnya. Super User bukanlah sesuatu saat itu. Sudah porting, jadi juga ada di sana. Tidak yakin mengapa itu masih di sini, tapi itu adalah pertanyaan skor tertinggi saya dan saya tidak akan melihat karma hadiah di mulut.
Matthew Scouten

16
TIP: rm -r link/ menghapus konten pada target
Gayan Weerakutti

31
Then I went to find my back-ups- Itu membuatku tertawa.
frakman1

Jawaban:


1308
# this works:
rm foo
# versus this, which doesn't:
rm foo/

Pada dasarnya, Anda perlu mengatakannya untuk menghapus file , bukan menghapus direktori . Saya percaya perbedaan antara rmdan rmdirada karena perbedaan dalam cara perpustakaan C memperlakukan masing-masing.

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

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


121
ah iya. itu masuk akal. Saya tidak pernah mengetik foo, saya mengetik f <tab> dan bash mengisi / untuk saya.
Matthew Scouten

6
Ini tidak selalu berhasil. Kadang-kadang Anda perlu menjalankan rm -rf folderName(tanpa trailing /) untuk menghapus symlink. Amazon Linux berlaku seperti ini dalam keadaan tertentu, misalnya.
naskah merek

18
@ r3mus: Jangan pernah gunakan -rdengan symlink kecuali Anda ingin kehilangan semua yang ada di dalamnya. -fjuga tidak diperlukan, kecuali mungkin untuk mengganti izin file.
Matthew Scharley

27
Secara khusus, unlinktidak ada hubungannya dengan lnoperasi 'tautan' AKA. Nama ini unlinkmengacu pada proses pembatalan tautan / penghapusan file dari tabel file sistem file sehingga konten menjadi terlepas dari referensi apa pun kepada mereka - mereka tidak terhubung. Itu nama yang membingungkan yang benar-benar menyesatkan ketika diterapkan pada tautan dan symlink pada khususnya. unlinkakan bekerja dengan symlink karena berfungsi dengan file apa pun apa pun jenisnya.
Matthew Scharley

4
Jika Anda pernah benar-benar khawatir melakukan sesuatu yang konyol, alias rm="rm -i"telah menyelamatkan lebih banyak kulit daripada hal lain di luar sana yang saya pikir.
Matthew Scharley

832

gunakan perintah "unlink" dan pastikan untuk tidak memiliki / pada akhirnya

$ unlink mySymLink

batalkan tautan () menghapus nama dari sistem file. Jika nama itu adalah tautan terakhir ke sebuah file dan tidak ada proses yang membuka file itu, file itu dihapus dan ruang yang digunakan disediakan untuk digunakan kembali. Jika nama itu merupakan tautan terakhir ke suatu file tetapi proses apa pun masih membuka file tersebut, file tersebut akan tetap ada hingga deskriptor file terakhir yang merujuk padanya ditutup.

Saya pikir ini mungkin bermasalah jika saya membacanya dengan benar.

Jika nama tersebut merujuk pada tautan simbolik, tautan tersebut dihapus.

Jika nama merujuk ke soket, fifo atau perangkat, nama untuk itu dihapus tetapi proses yang memiliki objek terbuka dapat terus menggunakannya.

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


33
@OmarAbid Versi "rm foo /" membuatku takut. Yang ini sepertinya jauh lebih aman :)
Joe Phillips

9
Di Ubuntu, saya diuji dengan ~/c/a/file, /c/b/, dengan ln -s ~/c/a ~/c/b/. Dalam ~/c/b/, rm a/tidak berfungsi, rm -rf a/hanya mengosongkan aslinya a. unlink abekerja dengan sempurna, dan unlink a/tidak melakukan apa pun.
Brady Trainor

3
Di OS X 10.10, unlinkhanyalah sebuah alias untuk rm. Pergi untuk menunjukkan bahwa rmdisiplin yang tepat harus digunakan ketika berurusan dengan bagian mana pun dari struktur direktori Anda.
Doug Powers

1
Dalam skrip rm -fakan diam-diam menghapus tautan apakah itu ada atau tidak, sedangkan unlinkakan mengeluh jika tautan itu tidak ada. Tidak ada opsi `-f 'yang setara untuk memutuskan tautan, membuat skrip menjadi lebih kompleks.
pengguna linux shonky

22
unlinkdapat menghapus file biasa. itu kurang fitur daripada rmdan tidak khusus untuk symlink. rmjuga tidak menghapus direktori tanpa -rbendera. Jadi saya sarankan lebih suka rm, ia memiliki flag untuk verbose dan interaktif; serta pesan peringatan dan kesalahan yang bermakna.
ThorSummoner

18

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:~$ 

17

Gunakan rm symlinknametetapi tidak termasuk garis miring di akhir (jangan gunakan rm symlinkname/:). Anda kemudian akan ditanya apakah Anda ingin menghapus symlink, yuntuk menjawab ya.


63
Anda tidak salah, tetapi jawaban yang tepat sudah ada di sini dan diterima (4 tahun yang lalu!). Kenapa mengganggu?
Matthew Scouten

1
Google menjadikan ini sebagai cuplikan unggulan ketika mencari "Hapus symlink". Mungkin itu menyukai singkatnya, tidak yakin bagaimana heuristiknya bekerja. Lagi pula, saya segera melakukan facepalm ketika saya melihat kembali pada baris perintah saya :-)
Randall

12

Dengan asumsi itu sebenarnya adalah symlink,

$ rm -d symlink

Seharusnya mengetahuinya, tetapi karena kita tidak dapat mengaktifkan kode laten yang dimaksudkan untuk kasus lain yang tidak lagi ada tetapi terjadi untuk melakukan hal yang benar di sini.


7

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


4

Dengan asumsi pengaturan Anda adalah sesuatu seperti:, ln -s /mnt/bar ~/foomaka Anda harus dapat melakukan rm footanpa masalah. Jika Anda tidak bisa, pastikan Anda adalah pemilik foodan memiliki izin untuk menulis / mengeksekusi file. Menghapus footidak akan menyentuh bar, kecuali jika Anda melakukannya secara rekursif.


2

Di CentOS, jalankan saja rm linknamedan itu akan meminta untuk "menghapus tautan simbolik?". Ketik Ydan Enter, tautannya akan hilang dan direktori aman.


2

Saya punya masalah dengan MinGW (sebenarnya Git Bash) yang berjalan di Windows Server. Tidak ada saran di atas yang berhasil. Pada akhirnya salinan direktori dibuat dalam kasus kemudian menghapus tautan lunak di Windows Explorer kemudian menghapus item di Recycle Bin. Itu membuat suara seperti menghapus file tetapi tidak. Namun, lakukan backup!


3
"Itu membuat suara seperti menghapus file ..." - Wow!
Sterex

LMFAO. "Itu membuat suara seperti menghapus file ..."
Shivam Jha

Saya ingat floppy disk!
Keith Whittingham

Tidak ada satu pun di atas yang berfungsi untuk saya: eddyq @ eddyq-Latitude-E6440: ~ $ ls Unduhan Desktop Dropbox-Windows Music Public Videos dengan Dokumen Dropbox
contoh.desktop
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.