Jeszcze lepiej ls -lb(lub ls -lab, jeśli nazwa zaczyna się od .).
G-Man mówi „Przywróć Monikę”
1
Co dokładnie się stało? Pobrałeś dir1/fooi dir2/foona maszynie X, a następnie scpedytujesz je dir42na maszynie Y, a wyszły jako osobne pliki o tej samej nazwie? A może pobrałeś dwa pliki o tej samej nazwie do tego samego katalogu (na komputerze X) i wyszły jako osobne pliki o tej samej nazwie?
Trochę lepiej. Znak spacji jest oznaczony jako \ (chociaż nie wszystkie lsimplementacje to robią).
$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\
St\342\200\213\303\251phane
Teraz rozmawiamy (wszystkie znaki spoza ASCII są renderowane jako ósemkowa wartość ich bajtów)
Możesz także zrobić, a to działa na każdym wejściu:
$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $
Tutaj koniec linii jest oznaczony, $co ułatwia dostrzeżenie końcowego odstępu. Nie pomoże to jednak w wykryciu pliku o nazwieStéphane<newline>Stéphane
$ ls | perl -Mopen=locale -MUnicode::UCD=charinfo -lpe '
s/[^\41-\177]/"<".charinfo(ord$&)->{name}.">"/ge'
Ste<COMBINING ACUTE ACCENT>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane
St<ZERO WIDTH SPACE><LATIN SMALL LETTER E WITH ACUTE>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane<SPACE>
Wyjaśnia, co się stało.
Zobacz także inną odpowiedź, aby uzyskać więcej informacji na ten temat.
Jeśli nie masz nic przeciwko, żebym zapytał Stephane'a, co robi polecenie potokowe LC_ALL=C sed -n 1?
ryekayo
3
sed„s lpolecenie wyświetla sygnał wejściowy w postaci optycznie jednoznaczny. Dzięki LC_ALL = C upewniamy się, że używa do tego tylko znaków ASCII (chociaż przynajmniej w GNU sednie jest to konieczne).
Stéphane Chazelas,
2
@ StéphaneChazelas Możesz także użyć:LC_ALL=C ls -b
vinc17
@ vinc17, dobra uwaga, to także lepiej niż sed, aby dostrzec pliki ze znakami nowego wiersza, ale nie zawsze dostrzec końcowe miejsce. Dodałem to do odpowiedzi.
Stéphane Chazelas
Cholera, TIL, że możesz mieć spacje na końcu nazwy pliku i wygląda na to, że są dwa identyczne nazwy plików w systemie plików.! Świetna odpowiedź, ls | LC_ALL=C sed -n lnaprawdę było teraz dużą oszczędnością czasu, dzięki!
ls -la
?ls -lb
(lubls -lab
, jeśli nazwa zaczyna się od.
).dir1/foo
idir2/foo
na maszynie X, a następniescp
edytujesz jedir42
na maszynie Y, a wyszły jako osobne pliki o tej samej nazwie? A może pobrałeś dwa pliki o tej samej nazwie do tego samego katalogu (na komputerze X) i wyszły jako osobne pliki o tej samej nazwie?Odpowiedzi:
Może tylko wyglądają, jakby miały to samo imię.
Próbować:
Wyglądają prawie tak samo.
Trochę lepiej. Znak spacji jest oznaczony jako
\
(chociaż nie wszystkiels
implementacje to robią).Teraz rozmawiamy (wszystkie znaki spoza ASCII są renderowane jako ósemkowa wartość ich bajtów)
Możesz także zrobić, a to działa na każdym wejściu:
Tutaj koniec linii jest oznaczony,
$
co ułatwia dostrzeżenie końcowego odstępu. Nie pomoże to jednak w wykryciu pliku o nazwieStéphane<newline>Stéphane
Wyjaśnia, co się stało.
Zobacz także inną odpowiedź, aby uzyskać więcej informacji na ten temat.
źródło
LC_ALL=C sed -n 1
?sed
„sl
polecenie wyświetla sygnał wejściowy w postaci optycznie jednoznaczny. Dzięki LC_ALL = C upewniamy się, że używa do tego tylko znaków ASCII (chociaż przynajmniej w GNUsed
nie jest to konieczne).LC_ALL=C ls -b
ls | LC_ALL=C sed -n l
naprawdę było teraz dużą oszczędnością czasu, dzięki!