Podczas rozpakowywania archiwum napotkałem katalog, który ls
zgłasza się jako „??????????????? ?????”. Przypuszczalnie nazwa nie jest w kodzie Unicode? W każdym razie nie mogę znaleźć sposobu na uzyskanie dostępu do folderu. Próbowałem cd $(find -inum inode_number)
, ale to mi daje
"bash: cd: ./??????????: No such file or directory".
Czy istnieje inny sposób na bezpośredni dostęp do folderu przez jego numer i-węzła?
filenames
inode
directory-listing
jackd243
źródło
źródło
cd */
może działać.*
powinien rozwinąć zrozumiały dla powłoki opis katalogu icd
ignoruje dodatkowe argumenty. Innym sposobem może być użycie graficznego menedżera plików (w tym MC opartego na terminalu) lub wbudowanych nawigatorów drzewa plików, np. Vima. Możesz także eksperymentować z-exec
przejściemfind, not with
bezpośrednio na cd` (który jest wbudowany w powłokę), ale np. Zls
innymi narzędziami.cd
wiele argumentów kończy się niepowodzeniem.too many arguments
”.Odpowiedzi:
Ogólne podejście, aby móc operować na dowolnym katalogu (lub pliku), polega na użyciu jego numeru i-węzła.
Najpierw użyj ls, aby uzyskać i-węzeł danego folderu:
-l
do długiej listy (opcjonalnie)-i
uzyskać wartości i-węzła-a
aby wyświetlić wszystkie pliki, nawet pliki ukryte (opcjonalnie)Na liście zobaczysz długą liczbę w pierwszej kolumnie, mniej więcej taką:
Teraz możesz przejść do tego katalogu, używając:
... ale zastępując ###### długim numerem, który masz na liście katalogów.
Oczywiście polecenie nie musi być
cd
. To może byćrm
,cp
,mv
, etc ...źródło
Ponieważ znaki są prawdopodobnie znakami międzynarodowymi, prawdopodobnie pojawiają się jako kody kontrolne w twoim zestawie znaków en_US, dlatego ls pokazuje je jako znaki zapytania.
Może to wynikać z domyślnego wyboru aliasu przez Twoją dystrybucję w profilu globalnym. Na przykład:
Możesz sprawdzić, czy Twoja dystrybucja to zrobiła, wpisując w swojej powłoce:
Które wydrukuje coś takiego:
Strona, do której prowadzi link poniżej, sugeruje, że jeśli wykonasz „ls -b”, zobaczysz ósemkowe kody sterujące, abyś wiedział przynajmniej, jakie znaki są w użyciu.
http://www.arsc.edu/arsc/support/howtos/nonprintingchars/
Zakładając, że to nie działa, masz inną opcję wymienioną również bliżej dołu:
Narzędzie, którego dotychczas nie znałem, o nazwie OctalDump (w Debianie - / usr / bin / od)
Pokaże ósemkową formę kodów kontrolnych.
Pokaże ci znaki, w tym wszelkie ukryte dodatkowe białe znaki, które mogą znajdować się na końcu (zwróć uwagę na dodatkowe spacje na końcu w ich przykładzie)
Kiedy już wiesz, jakie znaki kontrolne są w grze i czy są dodatkowe ukryte białe znaki, możesz być w stanie znaleźć sposób na cd do katalogu, unikając znaków kontrolnych. W przeciwnym razie istnieje kilka opcji zmiany nazwy katalogu.
Na powyższej stronie również wygodnie i szybko znajduje się brudna metoda usuwania znaków kontrolnych za pomocą polecenia mv, która, jak sądzę, będzie działać, pod warunkiem, że uciekniesz ze spacji, ale NIE uciekaj przed znakami zapytania (w ten sposób czyniąc je pojedynczymi znakami symbole wieloznaczne) i dopóki w katalogu, w którym znajduje się ten nieuczciwy katalog, nie ma nic innego. Powodem tych jawnych wymagań jest to, że używasz tylko znaków wieloznacznych i pojedynczej spacji, a zatem nie chcesz, aby symbol wieloznaczny przypadkowo pasował do dowolnego innego pliku lub katalogu.
Jeśli powyższa metoda nie działa, prawie na pewno można użyć metody find wspomnianej w innych odpowiedziach w inny sposób. Zamiast próbować cd do katalogu przy użyciu numeru i-węzła, o którym mówiłeś, że próbowałeś, możesz zmienić nazwę za pomocą numeru i-węzła. Po prostu skopiuj cały zestaw 3 wierszy dla tego polecenia z powyższej strony (zamień część „pożądana nazwa” na rzeczywistą nazwę, dla której chcesz zmienić jej nazwę).
Po zmianie nazwy katalogu dostęp do niego powinien być możliwy. Mogę mieć tylko nadzieję, że nie zawiera również plików z kodami sterującymi w nazwach, albo będziesz musiał przepłukać i powtórzyć dla każdego pliku (i / lub podkatalogu) w katalogu, którego nazwa właśnie zmieniłeś, w którym to momencie pętla for prawdopodobnie rozsądnie jest po prostu nazwać każdy plik jako liczbę, zwiększając od 1. :-)
źródło
„?” ma specjalne znaczenie w powłoce, oznacza „dowolny znak, w tym żaden”. Więc jeśli twój plik naprawdę ma nazwę „??????????????? ?????” prawdopodobnie musisz uciec przed „?” (i spacje), abyś mógł wypróbować coś takiego jak cd \? \? \? \? \? \? \ \? \? \? \? (jeśli jeszcze nie próbowałeś)
Zakłada się, że ktoś celowo nadał temu plikowi podchwytliwą nazwę, a nie zniekształcone / uszkodzone / nielegalne kodowanie.
źródło
ls
lubi wyświetlać znaki spoza ASCII (≥0x7F) jako?
–– więc nazwa katalogu prawdopodobnie nie jest tylko ciągiem znaków zapytania.Zrobić
ls
. Czy w katalogu (pliku lub podkatalogu) jest coś o nazwie dłuższej niż podkatalog „mystery” (czyli 21, jeśli „???????????????????” ”to dokładny)? Następnie zmień ich nazwy na krótsze lub przenieś je do innych katalogów. Następnie wpiszTen symbol wieloznaczny (20 znaków zapytania i gwiazdka) powinien pasować do dowolnej nazwy o długości 20 znaków lub dłuższej - a pierwsza instrukcja, którą podałem, powinna zapewnić, że Twój tajemniczy podkatalog jest jedyną rzeczą, która pasuje do tego wzorca. Ale może być bardziej użyteczne
źródło
ls
z opcją albo--quoting-style=shell
albo--quoting-style=escape
, aby zmusić ją do utworzenia odpowiednio ocalonej wersji tej nazwy pliku.Jednym łatwym sposobem, aby zobaczyć, co tam jest, jest przesłanie FTP na maszynę za pomocą FileZilla. Następnie możesz użyć FileZilla do zmiany nazwy katalogu.
źródło
Do pracy z katalogiem używaj przeglądarki plików, takiej jak Midnight Commander (tekst), Nautilus (GNOME) lub Dolphin (KDE).
źródło
do pracy z katalogami (lub plikami), które mają dziwne / trudne do wpisania nazwy:
1) Uruchom,
ls -i
aby odkryć i-węzeł pliku.Ta
ls
opcja daje każdą nazwę pliku i identyfikator tego pliku w systemie plików (i-węzeł)2) Użyj polecenia find, aby uruchomić polecenie w pliku
powiedzmy, że i-węzłem było 9961926
możesz biegać
aby usunąć plik
lub
aby przenieść go na lepszą nazwę
lub nawet
aby nadać mu nową nazwę, zachowując starą nazwę
(przypuszczalnie możesz również uruchomić inne polecenia. Niestety nie mogłem użyć tej linii do uruchomienia
cd
)źródło