Lebih baik lagi, ls -lb(atau ls -lab, jika namanya dimulai dengan .).
G-Man Mengatakan 'Reinstate Monica'
1
Juga, apa, tepatnya, yang terjadi? Anda mengunduh dir1/foodan dir2/foomenggunakan mesin X, lalu scpmengeditnya dir42di mesin Y, dan mereka keluar sebagai file terpisah dengan nama yang sama? Atau Anda mengunduh dua file dengan nama yang sama ke direktori yang sama (pada mesin X), dan mereka keluar sebagai file terpisah dengan nama yang sama?
G-Man Mengatakan 'Reinstate Monica'
Jawaban:
39
Mungkin mereka hanya terlihat memiliki nama yang sama.
Sedikit lebih baik. Karakter spasi ditandai sebagai \ (walaupun tidak semua lsimplementasi melakukan itu).
$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\
St\342\200\213\303\251phane
Sekarang kita berbicara (semua karakter non-ASCII diberikan sebagai nilai oktal dari konstituen byte mereka)
Anda juga dapat melakukannya, dan itu berfungsi untuk masukan apa pun:
$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $
Di sini, ujung garis ditandai dengan $yang membuatnya lebih mudah untuk menemukan ruang trailing. Namun, itu tidak akan membantu menemukan file yang dipanggilSté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>
Buat lebih jelas apa yang terjadi.
Lihat juga jawaban lain ini untuk lebih lanjut tentang masalah ini.
Jika Anda tidak keberatan saya bertanya kepada Stephane, apa yang dilakukan perintah pipa LC_ALL=C sed -n 1?
ryekayo
3
sed's lperintah menampilkan input dalam bentuk visual ambigu. Dengan LC_ALL = C, kami memastikan hanya menggunakan karakter ASCII untuk itu (meskipun setidaknya dengan GNU sed, itu tidak perlu).
Stéphane Chazelas
2
@ StéphaneChazelas Anda juga dapat menggunakan:LC_ALL=C ls -b
vinc17
@ vinc17, poin bagus, itu juga lebih baik daripada sed to spot file dengan karakter baris baru, tetapi tidak selalu menemukan spasi tambahan. Saya telah menambahkannya ke jawabannya.
Stéphane Chazelas
Sial, TIL bahwa Anda dapat memiliki spasi di akhir nama file dan sepertinya ada dua nama file yang identik di sistem file.! Jawaban yang bagus, ls | LC_ALL=C sed -n lbenar-benar menghemat waktu sekarang, terima kasih!
ls -la
tolong?ls -lb
(atauls -lab
, jika namanya dimulai dengan.
).dir1/foo
dandir2/foo
menggunakan mesin X, laluscp
mengeditnyadir42
di mesin Y, dan mereka keluar sebagai file terpisah dengan nama yang sama? Atau Anda mengunduh dua file dengan nama yang sama ke direktori yang sama (pada mesin X), dan mereka keluar sebagai file terpisah dengan nama yang sama?Jawaban:
Mungkin mereka hanya terlihat memiliki nama yang sama.
Mencoba:
Mereka terlihat hampir sama.
Sedikit lebih baik. Karakter spasi ditandai sebagai
\
(walaupun tidak semuals
implementasi melakukan itu).Sekarang kita berbicara (semua karakter non-ASCII diberikan sebagai nilai oktal dari konstituen byte mereka)
Anda juga dapat melakukannya, dan itu berfungsi untuk masukan apa pun:
Di sini, ujung garis ditandai dengan
$
yang membuatnya lebih mudah untuk menemukan ruang trailing. Namun, itu tidak akan membantu menemukan file yang dipanggilStéphane<newline>Stéphane
Buat lebih jelas apa yang terjadi.
Lihat juga jawaban lain ini untuk lebih lanjut tentang masalah ini.
sumber
LC_ALL=C sed -n 1
?sed
'sl
perintah menampilkan input dalam bentuk visual ambigu. Dengan LC_ALL = C, kami memastikan hanya menggunakan karakter ASCII untuk itu (meskipun setidaknya dengan GNUsed
, itu tidak perlu).LC_ALL=C ls -b
ls | LC_ALL=C sed -n l
benar-benar menghemat waktu sekarang, terima kasih!