Seperti yang Anda lihat di bawah, file-file tersebut memiliki karakter yang tidak biasa.
Menghapusnya baik di terminal atau Dolphin mengembalikan kesalahan:
tidak ada berkas atau direktori seperti itu
Berjalan ls -la
di direktori memberi saya output ini:
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ?2?.???љ?!?Gb??σ?[?F?
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 3l??#g?w????O?JKB7?co??քH??bT?NA???S???X?I?A?qC??M?I???
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??8??-?@,?Zp?[?bI????7^?ñ[?ڏ??z?O???ч??eEȰ?+??,OF??h
Saya menjalankan fsck
perintah pada partisi dari OS lain tetapi tidak mengubah apa pun.
Bagaimana cara menghapus file-file ini?
files
filesystem
encoding
filename
karjedavpalaa
sumber
sumber
Jawaban:
Cara sederhana adalah menghapus file-file ini dengan inode mereka. :)
Gunakan
ls -li
dalam direktori dengan karakter yang tidak biasa untuk menunjukkan nomor inode setiap file, misalnya,Selanjutnya, gunakan
find
utilitas untuk menghapus file yang sesuai dengan namanya, menggunakan sintaksfind <somepath> -inum <inode_number> -exec rm -i {} \;
, seperti dalam contoh berikut:The
-i
pilihan untukrm
tidak benar-benar diperlukan, saya hanya menambahkan untuk menjaga Anda dari sengaja menghapus file Anda tidak bermaksud untuk menghapus. :) Itu menyebabkanrm
meminta konfirmasi untuk setiap file yang ingin Anda hapus.Jika Anda ingin menghapus beberapa file dengan inode mereka, Anda dapat menggunakan sintaks
-o
(arti atau ) untukfind
:Anda dapat menambahkan lebih banyak nomor inode dengan memperluas ekspresi dalam tanda kurung dengan lebih banyak
-o -inum <inode_number>
ekspresi.sumber
rm -ri .
?rm -ri .
tidak menghapus file dengan inode. Itu hanya akan berulang melalui seluruh direktori kerja dan meminta setiap file jika Anda ingin menghapusnya - dan Anda harus sangat memperhatikan file yang diminta agar tidak secara tidak sengaja menghapus yang tidak diinginkan. Saya tentu tidak ingin menggunakan perintah ini untuk direktori rumah saya - ini berisi BANYAK file. ;)-inum
memberi tahufind
untuk mencari file dengan nomor inode mereka. (2){}
cocok dengan file yang ditemukan olehgrep
. (3) \ lolos dari;
simbol yang menghentikan perintah yang diteruskan ke-exec
opsifind
. (4) Saya telah mengedit jawaban saya untuk menjelaskan cara menghapus banyak file sekaligus.Penting untuk dipahami bahwa ini bukan jenis "korupsi sistem file" yang
fsck
akan membantu. Sejauh menyangkut filesystem, nama file dapat berupa urutan byte , selama tidak ada byte tunggal yang memiliki nilai 0x00 (ASCII NUL, C end-of-string marker) atau 0x2F (/
, pemisah direktori). (Jika nama file entah bagaimana mendapatkan byte 00 atau 2F tertanam di dalamnya,fsck
harus memperbaikinya.)Alih-alih, yang Anda miliki adalah nama file yang menurut perangkat lunak aplikasi (Dolphin,
ls
) berisi karakter yang tidak dapat ditampilkan di "lokal" Anda, jadi itu menggantinya dengan karakter placeholder. Anda juga tidak dapat mengetikkan karakter-karakter itu, jadi memanipulasi file lebih sulit, tetapi Anda dapat melakukannya selama Anda melakukannya tanpa pernah mengetik atau menyalin dan menempelkan nama. Sebagai contoh, jika Anda menghapus atau mengganti nama file-file yang bermasalah langsung dari dalam Dolphin, itu seharusnya hanya berfungsi (saya akan mengatakan bahwa jika itu tidak berhasil, itu adalah bug di Dolphin).Jika Anda perlu melakukan sesuatu tentang mereka dari shell (misalnya, jika mereka dimiliki oleh
root
dan oleh karena itu tidak dapat dimodifikasi oleh program GUI), Anda dapat memberi nama mereka secara tidak langsung menggunakan pola "glob", yang akan diperluas ke urutan yang benar (s) dari byte dan diteruskan.Sekarang, tentu saja, Anda tidak akan ingin menghapus hal-hal secara tidak sengaja karena pola glob Anda terlalu cocok, jadi rekomendasi saya adalah menggunakan
rename
utilitas Perl untuk mengonversi setiap nama file ke pengkodean hex-nya:Ini tidak menghancurkan informasi apa pun - baik file itu sendiri, maupun makna apa pun yang semula mungkin telah dikodekan dalam nama file sebelum hancur. Dapat dibatalkan untuk file tertentu dengan mis
Perhatian: ada dua program bernama
rename
, dari asal yang berbeda; perintah di atas hanya akan bekerja dengan yang berasal dari Perl. Di Ubuntu, yang Anda inginkan adalah yang dari paket "rename", bukan yang dari paket "util-linux".rename -h
akan membedakan: inilah yang Anda inginkan ...... ini bukan yang kamu inginkan ...
Hal utama yang harus dicari adalah "perlexpr". Anda mungkin memiliki versi yang lebih lama dari perubahan nama Perl yang tidak mengerti semua opsi di atas, tetapi perintah yang saya perlihatkan masih tetap berfungsi.
Sunting: Di bawah 14.04 .5 skrip perl yang disertakan untuk
rename
tidak mendukung -h switch. Anda dapat mengonfirmasi bahwa Anda memiliki yang benar dengan memeriksa halaman manualnyaman rename
yang dalam hal ini baris teratas akan berisi:sumber
file $(which rename)
dicetak? (Pastikan Anda sudahfile
menginstal paketnya.)/usr/bin/rename: symbolic link to /etc/alternatives/rename
(file
sudah terinstal secara default) Sebenarnya Anda harus mengejar tautan simbolik untuk mendapatkannya/usr/bin/file-rename: a /usr/bin/perl -w script, ASCII text executable
tetapiman rename
merupakan indikasi yang lebih cepat ...--version
; perintah yang saya sarankan harus tetap berfungsi. (/usr/share/doc/rename/changelog.gz di komputer saya, yang menjalankan Debian tidak stabil, menunjukkan bahwa--version
telah ditambahkan di versi 0.10 dari perubahan nama Perl, pada 2013. Saya terkejut Ubuntu masih mengirimkan sesuatu yang lebih tua dari itu, tetapi program ini belum benar-benar mengubah fungsinya sejak 2007 (!) jadi tidak masalah.)