Jak widać poniżej, pliki mają nietypowe znaki.
Usunięcie ich w terminalu lub Dolphin zwraca błąd:
Brak takiego pliku lub katalogu
Uruchomienie ls -la
katalogu dało mi ten wynik:
-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
Uruchomiłem fsck
polecenie na partycji z innego systemu operacyjnego, ale nic to nie zmieniło.
Jak mogę usunąć te pliki?
files
filesystem
encoding
filename
karjedavpalaa
źródło
źródło
Odpowiedzi:
Prostym sposobem byłoby usunięcie tych plików według ich i-węzłów. :)
Użyj
ls -li
w katalogu z nietypowymi znakami, aby wyświetlić numer i-węzła każdego pliku, np.Następnie użyj
find
narzędzia, aby usunąć odpowiedni plik według jego nazwy, używając składnifind <somepath> -inum <inode_number> -exec rm -i {} \;
, jak w poniższym przykładzie:-i
Opcjarm
nie jest to naprawdę konieczne, po prostu dodaje się do siebie przed przypadkowym usuwania plików nie chciałem usunąć. :) Powodujerm
prośbę o potwierdzenie dla każdego pliku, który chcesz usunąć.Jeśli chcesz usunąć wiele plików według ich i-węzłów, możesz użyć składni
-o
(znaczenia lub ) dlafind
:Możesz dodać więcej numerów i-węzłów, rozszerzając wyrażenie w nawiasach o więcej
-o -inum <inode_number>
wyrażeń.źródło
rm -ri .
?rm -ri .
nie usuwa jednak plików według i-węzła. Po prostu przejdzie przez cały katalog roboczy i poprosi o każdy plik, jeśli chcesz go usunąć - i musisz bardzo uważnie wybierać pliki, o które prosi, aby nie przypadkowo usunąć niechcianych plików. Na pewno nie chciałbym używać tego polecenia do mojego katalogu domowego - zawiera DUŻO plików. ;)-inum
każefind
szukać plików według ich numeru i-węzła. (2){}
odpowiada plikowi znalezionemu przezgrep
. (3) \ ucieka;
symbolowi, który kończy polecenie przekazane do-exec
opcjifind
. (4) Zredagowałem swoją odpowiedź, aby wyjaśnić, jak usunąć wiele plików za jednym razem.Ważne jest, aby zrozumieć, że nie jest to rodzaj „uszkodzenia systemu plików”,
fsck
który pomoże. Jeśli chodzi o system plików, nazwy plików mogą być dowolną sekwencją bajtów , o ile żaden pojedynczy bajt nie ma wartości 0x00 (ASCII NUL, znacznik końca łańcucha C) lub 0x2F (/
separator katalogu). (Jeśli nazwa pliku ma wbudowany bajt 00 lub 2F,fsck
powinna to naprawić).Zamiast tego mamy nazwy plików, które według oprogramowania (Dolphin
ls
) zawierają znaki, których nie można wyświetlić w „ustawieniach regionalnych”, dlatego zastępuje je znakami zastępczymi. Nie możesz również wpisywać tych znaków, więc manipulowanie plikami jest trudniejsze, ale możesz to robić tak długo, jak to robisz, bez wpisywania, kopiowania i wklejania nazwy. Na przykład, jeśli usuniesz lub zmienisz nazwę plików problemów bezpośrednio z Dolphin, powinno to po prostu działać (posunąłbym się do stwierdzenia, że jeśli to nie działa, to jest błąd w Dolphin).Jeśli musisz coś z nimi zrobić z powłoki (na przykład, jeśli są one własnością
root
i dlatego nie mogą być modyfikowane przez program GUI), możesz nazwać je pośrednio za pomocą wzorców „glob”, które zostaną rozwinięte do prawidłowej sekwencji (s) bajtów i przekazywane dalej.Teraz oczywiście nie chcesz przypadkowo usuwać elementów, ponieważ wzorzec globu jest zbyt dopasowany, dlatego zalecam użycie
rename
narzędzia Perl do konwersji każdej nazwy pliku na kodowanie szesnastkowe:Nie niszczy to żadnych informacji - ani sam plik, ani jakiekolwiek znaczenie mogło być pierwotnie zakodowane w nazwie pliku, zanim zostanie on zniekształcony. Można go cofnąć dla określonych plików za pomocą np
Uwaga: istnieją dwa programy o
rename
różnych nazwach ; powyższe polecenia będą działać tylko z tym, które pochodzi z Perla. W Ubuntu ten, którego potrzebujesz, to ten z pakietu „zmień nazwę”, a nie ten z pakietu „util-linux”.rename -h
rozróżni: to jest to, czego chcesz ...... nie tego chcesz ...
Kluczową sprawą jest „perlexpr”. Być może masz starszą wersję zmiany nazwy Perla, która nie rozumie wszystkich powyższych opcji, ale polecenie, które pokazałem, powinno nadal działać.
Edycja: poniżej 14.04 .5 dołączony skrypt perla
rename
nie obsługuje przełącznika -h. Możesz potwierdzić, że masz poprawny, sprawdzając stronęman rename
podręcznika, w którym to przypadku górna linia będzie zawierać:źródło
file $(which rename)
drukuje? (file
Najpierw upewnij się, że masz zainstalowany pakiet)./usr/bin/rename: symbolic link to /etc/alternatives/rename
(file
jest instalowany domyślnie) Właściwie musisz gonić za symbolicznymi linkami, aby uzyskać,/usr/bin/file-rename: a /usr/bin/perl -w script, ASCII text executable
aleman rename
jest to szybsze wskazanie ...--version
; polecenie, które zasugerowałem, powinno nadal działać. (/usr/share/doc/rename/changelog.gz na moim komputerze, na którym działa Debian niestabilny, wskazuje, że--version
został dodany w wersji 0.10 zmiany nazwy Perla w 2013 roku. Dziwię się, że Ubuntu wciąż dostarcza coś starszego niż to, ale ten program tak naprawdę nie zmienił swojej funkcjonalności od 2007 roku (!), więc jest w porządku.)