ls на точечный файл

Мой каталог содержит:

$ ls -A    
.dotfile20091021   file20091020       file20091021

Я хочу перечислить ВСЕ файлы, содержащие 20091021 в названии.

Если я бегу:

$ ls -A *20091021*    
file20091021

Если я бегу:

$ ls -A .*20091021*    
.dotfile20091021

Могу ли я получить оба файла в одной команде "ls"?

4 ответа4

4
ls -A1 | grep "20091021"
2

Вы можете просто сделать

ls -a *20091021 .*20091021

(Строго придерживаясь вашего запроса, вы хотите сделать это в одном ls)

1

По этой ссылке есть опция bash для создания глобальных файлов:

shopt -s dotglob

Если вы используете bash, то все, что вам нужно будет сделать после этого:

ls -A *20091021*

(Не могу проверить это здесь)

0

Вы полагаетесь (какую бы оболочку вы не использовали) на расширение глобуса.

ls -lah | grep \.foo

.. может помочь вам разобраться в этом портативным способом.

Например:

user@tower:~ ls -lah | grep \.mozilla
drwx------  3 root root 4.0K 2007-11-14 06:17 .mozilla
user@tower:~    

Вот сила трубы :) Расширение это упражнение для читателя. shopt не переносим и в системах, которые используют строго POSIX-оболочку (например, dash), он ломается. Лучше написать это просто и переносимо ... или вы загрузите свой проверенный и верный скрипт в коробку с каким-то другим дистрибутивом и будете ужасно смотреть, как он ломается.

Обратите внимание, что каждая оболочка выполняет расширение glob по-своему, что в целом определяется ее лицензией. Пожалуйста, пожалуйста, пожалуйста, избегайте излишеств. Ubuntu потратил десятки тысяч долларов, чтобы избавиться от тех, кто в их продукте.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .