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:
alias ls='ls -q'
Możesz sprawdzić, czy Twoja dystrybucja to zrobiła, wpisując w swojej powłoce:
alias ls
Które wydrukuje coś takiego:
$ alias ls
alias ls='ls --color=auto'
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)
$ ls | od -b
Pokaże ósemkową formę kodów kontrolnych.
$ ls | od -c
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. :-)
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.