Можете ли вы показать результаты, ls -laпожалуйста?
ryekayo
2
Еще лучше ls -lb(или ls -lab, если название начинается с .).
G-Man говорит: «Восстановите Монику»
1
Кроме того, что именно произошло? Вы загрузили dir1/fooи dir2/fooна машине X, затем scpотредактировали их dir42на машине Y, и они вышли в виде отдельных файлов с тем же именем? Или вы загрузили два файла с одинаковым именем в один и тот же каталог (на компьютере X), и они вышли в виде отдельных файлов с одинаковым именем?
G-Man говорит: «Восстанови Монику»
Ответы:
39
Может быть, они только выглядят так, как будто имеют одинаковое имя.
Немного лучше. Символ пробела помечается как \ (хотя это lsделают не все реализации).
$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\
St\342\200\213\303\251phane
Теперь мы говорим (все не-ASCII символы отображаются как восьмеричное значение их байтовых составляющих)
Вы также можете сделать, и это работает для любого ввода:
$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $
Здесь конец строк помечен, $что облегчает определение конечного пробела. Тем не менее, это не поможет определить файл с именемSté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>
Делает понятнее, что случилось.
Смотрите также этот другой ответ для получения дополнительной информации по этому вопросу.
Если вы не возражаете, я спрашиваю Стефана, что делает команда piped LC_ALL=C sed -n 1?
ryekayo
3
sed«S lкоманда отображает входные в визуально однозначной форме. С LC_ALL = C мы удостоверимся, что для этого используются только символы ASCII (хотя по крайней мере с GNU sedэто не обязательно).
Стефан Шазелас
2
@ StéphaneChazelas Вы также можете использовать:LC_ALL=C ls -b
Vinc17
@ vinc17, хорошая мысль, это также лучше, чем sed, чтобы обнаружить файлы с символами новой строки, но не всегда, чтобы определить конечный пробел. Я добавил это к ответу.
Стефан Шазелас
Блин, TIL, что в конце имени файла могут быть пробелы, и похоже, что в файловой системе есть два файла с одинаковыми именами. Отличный ответ, ls | LC_ALL=C sed -n lдействительно , это было очень экономит время, спасибо!
ls -la
пожалуйста?ls -lb
(илиls -lab
, если название начинается с.
).dir1/foo
иdir2/foo
на машине X, затемscp
отредактировали ихdir42
на машине Y, и они вышли в виде отдельных файлов с тем же именем? Или вы загрузили два файла с одинаковым именем в один и тот же каталог (на компьютере X), и они вышли в виде отдельных файлов с одинаковым именем?Ответы:
Может быть, они только выглядят так, как будто имеют одинаковое имя.
Пытаться:
Они выглядят примерно так же.
Немного лучше. Символ пробела помечается как
\
(хотя этоls
делают не все реализации).Теперь мы говорим (все не-ASCII символы отображаются как восьмеричное значение их байтовых составляющих)
Вы также можете сделать, и это работает для любого ввода:
Здесь конец строк помечен,
$
что облегчает определение конечного пробела. Тем не менее, это не поможет определить файл с именемStéphane<newline>Stéphane
Делает понятнее, что случилось.
Смотрите также этот другой ответ для получения дополнительной информации по этому вопросу.
источник
LC_ALL=C sed -n 1
?sed
«Sl
команда отображает входные в визуально однозначной форме. С LC_ALL = C мы удостоверимся, что для этого используются только символы ASCII (хотя по крайней мере с GNUsed
это не обязательно).LC_ALL=C ls -b
ls | LC_ALL=C sed -n l
действительно , это было очень экономит время, спасибо!