Почему «ls. *» Показывает содержимое скрытых каталогов?

Ввод разделен *. Получите пятое поле:

$ cut -d '*' -f 5 tus.txt
222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403

Это желаемый результат, который вы упомянули, но вы также говорите о его сортировке:

$ cut -d '*' -f 5 tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
262105589241-20172-31489016
36
4578873831221

Если вы по какой-то причине хотите отсортировать исходные данные в этом поле (здесь не удаляются дубликаты):

$ sort -t '*' -k5,5 tus.txt
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21759295*4932379*B*00082403*Y*2708332
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758895*4932764*B*4578873831221*Y*
0
13.04.2017, 15:36
4 ответа

Потому что вы говорите это конкретно. В случае, если часть расширения оболочки оболочки была очевидна для вас, я полагаю, что ответ, который вам действительно нужен, был связан с путаницей, стоящей за вашим вопросом.

Вы путаете то, что вы даете ls, с тем, что вам дает ls. Хотя ls не дает вам скрытых каталогов / файлов, вы можете предоставить ему список скрытых каталогов / файлов. Что вы сделали, используя специально . * (акцент сделан на . , а не на * ).

1
28.01.2020, 02:13

Почему ls. * распечатывает содержимое скрытых каталогов?

Когда ls задается каталог, он печатает содержимое этого каталога (по умолчанию, за исключением скрытых файлов в этом каталоге). С помощью ls. * оболочка предоставила ls список файлов и каталогов, начинающихся с .

Вы можете использовать set -x , чтобы увидеть команду, вызываемую оболочкой (т. Е. После раскрытия глобусов оболочки).

3
28.01.2020, 02:13

Краткий ответ: расширение оболочки оболочки.

Оболочка принимает ваш ввод и расширяет часть . * перед передачей в ls , так что эффективно вы делаете:

$ ls .bash_history .bash_profile .bashrc .coin_history .emacs ...

Итак, он перечисляет каждую запись. Когда он видит запись в каталоге, он перечисляет содержимое этого каталога, как и следовало ожидать от ls . Чтобы увидеть только файлы / каталоги в вашем рабочем каталоге, используйте параметр -d для ls :

$ ls -d .*

Параметр -d сообщает ls , чтобы «перечислить сами каталоги, а не их содержимое» (взято из справочной страницы ls ).

5
28.01.2020, 02:13

Когда вы это сделаете

$ ls directory

вы получите листинг каталога. Если directory является каталогом, будет перечислено его содержимое, в противном случае он будет перечислен как любой другой файл.

При выполнении

$ ls dir*

вы получите список всех вещей, которые соответствуют dir*. Если что-то из этого является каталогом, вы увидите содержимое этих каталогов.

При выполнении

$ ls .*

вы получите тот же эффект, что и в предыдущем примере, только шаблон другой, и поскольку вы явно сопоставляете скрытые файлы и папки, они (сопоставленные) будут рассмотрены ls.

Используйте ls с флагом -d, если вы не заинтересованы в просмотре содержимого папки (скрытой или нет). Это останавливает ls от повторного обращения к любой найденной папке, которая соответствует заданному шаблону.

2
28.01.2020, 02:13

Теги

Похожие вопросы