Bagaimana cara menghapus file dengan nama aneh?

33

Saya menulis sebuah program yang menggunakan fungsi pemetaan memori POSIX ( mmap)

Program ini mengambil file ( a.dat) dan memetakan memori untuk membaca / menulis.

Karena kesalahan dalam program, setiap kali saya menjalankan program file dengan beberapa nama aneh (misalnya, ?d?P?^z??d?P?^z?) dibuat. Kesalahan teratasi tetapi saya tidak dapat menghapus file.

Saya tidak dapat menghapusnya baik menggunakan baris perintah atau dengan memilih / menghapus dari window manager.

Jadi bagaimana saya harus menghapusnya? Saya menggunakan Ubuntu 11.04.

AK
sumber
1
Bahkan jika Anda tidak dapat dengan mudah mengetikkan nama file, menghapusnya dari file manager grafis akan berfungsi dengan baik. Kesalahan apa yang Anda dapatkan?
Thomas
2
@Aditya, saya tidak punya masalah menghapus file seperti itu dari baris perintah ketika melarikan diri nama mereka dengan tanda kutip tunggal ( rm '?d?P?^z??d?P?^z?'). Apakah kamu mencobanya?
Frédéric Hamidi
menghapus dari window manager grafis hanya mengatakan tidak dapat menghapus file 'nama file'. @ Frédéric Hamidi Terima kasih telah membantu saya menghapus satu file. Tapi yang lain dengan nama '? M? P ???)? M? P ???)' tidak bisa dihapus ... Pesan kesalahan mengatakan "rm: tidak dapat menghapus`? M? P ???)? M ? P ???) ': Tidak ada file atau direktori "
AK
1
@Aditya, file lain itu harus memiliki karakter yang tidak dapat dicetak atas namanya. Coba langkah-langkah berikut: 1 / Pindahkan semua file yang valid dari folder itu, 2 / Masalah rm *di dalam folder.
Frédéric Hamidi
1
Saat mengetik nama file, coba mulai dengan tanda kutip, kemudian gunakan pelengkapan otomatis segera setelah berhasil (setelah satu atau dua karakter). Penyelesaian otomatis akan menekan tombol [tab] untuk membuat shell secara otomatis melengkapi nama. Dengan cara ini Anda mungkin lebih berhasil menghindari nama-nama dengan benar.

Jawaban:

44

rm -i -- *akan meminta Anda untuk menghapus setiap file. Anda dapat dan harus mengubah '*' menjadi kecocokan yang lebih sempit jika ada banyak file. Opsi --berhenti memproses, sehingga file bernama -dakan dihapus dengan rmsukses.

Saya telah menggunakan itu di masa lalu dan berfungsi sampai Anda menekan karakter khusus atau 2 yang tidak suka.

JimR
sumber
1
Ini tidak berfungsi untuk file bernama -d misalnya.
SCO
2
@ SCO Jika tidak bekerja untuk Anda dan tergantung pada versi rmAnda, Anda dapat melakukannya rm -i -- * . --Memberitahu beberapa versi rm tidak ada lagi saklar baris perintah setelah --dan untuk memperlakukan argumen lebih lanjut sebagai nama file.
JimR
1
Saya pikir jawaban ini harus mencakup komentar yang disarankan oleh @JimR: Menggunakan --dalam rmperintah.
Felipe Alvarez
16

Anda dapat menggunakan ls -liuntuk menampilkan semua file dengan inode mereka. Kemudian jalankan perintah ini untuk menghapus file:

find . -inum ${INODE_NUM} -delete

Saya menambahkan -maxdepth 1pada temuan saya hanya untuk aman:

find . -maxdepth 1 -inum ${INODE_NUM} -delete
Felipe Alvarez
sumber
1
Sebenarnya, ls -icukup baik.
Scott
lstidak menghapus file. OP menginginkan ini.
Felipe Alvarez
4
Baris pertama dari jawaban Anda mengatakan, "Anda dapat menggunakan ls -liuntuk menampilkan semua file dengan inode mereka." Saya menunjukkan bahwa ls -icukup baik untuk mendapatkan daftar nama file dan nomor inode yang sesuai. (Tapi tentu saja Anda perlu ls -iajika Anda ingin memasukkan file-dot.)
Scott
Lebih baik hanya meneruskan -deleteopsi find, untuk meminimalkan penggunaan nama file yang salah.
ScumCoder