Jak usunąć plik o dziwnej nazwie?

33

Napisałem program, który używa funkcji mapowania pamięci POSIX ( mmap)

Program pobiera plik ( a.dat) i mapuje go w celu odczytu / zapisu.

Z powodu błędów w programie za każdym razem, gdy uruchamiam program, ?d?P?^z??d?P?^z?tworzony jest plik o dziwnych nazwach (np. ). Błąd został rozwiązany, ale nie mogę usunąć plików.

Nie mogę go usunąć ani za pomocą wiersza polecenia, ani przez wybranie / usunięcie z menedżera okien.

Jak mam to usunąć? Używam Ubuntu 11.04.

AK
źródło
1
Nawet jeśli nie możesz łatwo wpisać nazwy pliku, usunięcie go z graficznego menedżera plików powinno działać poprawnie. Jaki masz błąd?
Thomas
2
@Aditya, nie mam problemu z usunięciem takich plików z wiersza poleceń podczas zmiany ich nazw za pomocą pojedynczych cudzysłowów ( rm '?d?P?^z??d?P?^z?'). Próbowałeś tego?
Frédéric Hamidi
usunięcie z graficznego menedżera okien mówi tylko, że nie można usunąć pliku „nazwa pliku”. @ Frédéric Hamidi Dziękujemy za pomoc w usunięciu jednego pliku. Ale ten drugi o nazwie „? M? P ???)? M? P ???)” nie jest usuwany ... Komunikat o błędzie mówi „rm: nie można usunąć„? M? P ???)? M ? P ???) ': Brak takiego pliku lub katalogu ”
AK
1
@Aditya, ten inny plik musi mieć w nazwie znaki niedrukowalne. Spróbuj wykonać następujące czynności: 1 / Przenieś wszystkie prawidłowe pliki z tego folderu, 2 / Problem rm *w folderze.
Frédéric Hamidi
1
Podczas wpisywania nazwy pliku spróbuj rozpocząć od cudzysłowu, a następnie użyj automatycznego uzupełniania, gdy tylko zadziała (po jednym lub dwóch znakach). Automatyczne uzupełnianie uderzyłoby w klawisz [tab], aby powłoka automatycznie uzupełniała nazwę. W ten sposób poprawne unikanie nazw może być bardziej skuteczne.

Odpowiedzi:

45

rm -i -- *poprosi o usunięcie każdego pliku. Możesz i powinieneś zmienić „*” na węższe dopasowanie, jeśli jest dużo plików. --Zatrzymuje opcje przetwarzania, więc plik o nazwie -dzostaną usunięte rmpomyślnie.

Używałem tego w przeszłości i działa, dopóki nie trafisz specjalnej postaci lub 2, których nie lubi.

JimR
źródło
1
To nie działa na przykład dla pliku o nazwie -d.
SCO,
2
@SCO Jeśli to nie działa dla Ciebie w zależności od wersji rm, można zrobić mówi pewne wersje rm nie ma więcej linii linii poleceń po i traktować dalsze argumenty jako nazwy plików. rm -i -- *----
JimR
1
Myślę, że ta odpowiedź powinna zawierać komentarz sugerowany przez @JimR: Używanie --w rmpoleceniu.
Felipe Alvarez
16

możesz użyć, ls -liaby wyświetlić wszystkie pliki według ich i-węzłów. Następnie uruchom to polecenie, aby usunąć plik:

find . -inum ${INODE_NUM} -delete

Dodałem -maxdepth 1do mojego znaleziska, żeby być bezpiecznym:

find . -maxdepth 1 -inum ${INODE_NUM} -delete
Felipe Alvarez
źródło
1
Ściśle mówiąc, ls -ijest wystarczająco dobry.
Scott
lsnie usuwa plików. OP chce tego.
Felipe Alvarez
4
Pierwszy wiersz odpowiedzi brzmi: „możesz użyć, ls -liaby wyświetlić wszystkie pliki według ich i-węzłów”. Zaznaczam, że ls -ito wystarczy, aby uzyskać listę nazw plików i odpowiadających im numerów i-węzłów. (Ale oczywiście potrzebujesz, ls -iajeśli chcesz dołączyć pliki kropek.)
Scott
Lepiej po prostu przekazać tę -deleteopcję find, aby zminimalizować użycie niewłaściwej nazwy pliku.
ScumCoder