ls: не показывайте каталоги, которые соответствуют тому же шаблону в подстановочных поисках, только файлы

Одно решение состояло бы в том, чтобы установить Ваш макрос, чтобы принять и воздействовать на текущий выбор, затем выбрать часть файла, которым Вы хотите управлять на том, перед выполнением его.

5
07.10.2012, 00:28
6 ответов

Похож на Ваш вопрос, "Как перечислить файлы шаблоном, исключая каталоги с ls только".

Нет никакого способа сделать это с чистым ls. Можно объединиться ls + grep как:

ls -ld *2010* | grep -v '^d'

Однако намного лучше использовать find для этого:

find . -maxdepth 1 -type f -name "*2010*"
12
27.01.2020, 20:32
  • 1
    ! Я должен был думать о grepлуг для ^d. Я не думал об этом, очевидно.Спасибо. –  syntaxerror 05.10.2012, 19:09

Используйте zsh …

ls -l *2012*(.)

Спецификатор шарика . средства регулярные файлы только.

1
27.01.2020, 20:32

Не возможно выборочно отфильтровать каталоги с помощью только ls. Вам нужно также find или ls | grep, как описано в ответе порыва. Но для Вашего определенного примера, для ответа на вопрос Вы спросили в своем комментарии:

Так снова: Я хочу, чтобы налог* файлы в текущем каталоге был перечислен, но каталог "invoices2010", который находится в том же рабочем каталоге и который также соответствует данному подстановочному шаблону 2010 года, должен быть пропущен в списке.

можно сделать

ls -l --ignore='invoices*' *tax2010*

который отфильтровывает что-либо соответствующее ignore шаблон оболочки.

2
27.01.2020, 20:32

Не используйте grep с ls,

В ударе Вы могли показать файлы, которые имеют "2010" на его имя, но не смотрящий с числом:

ls -l *[!0-9]2010*

0
27.01.2020, 20:32

ls -dlp *2010* было бы хорошее начало к решению, но оно зависит, на что Вы хотите, чтобы вывод был похож.

0
27.01.2020, 20:32
  • 1
    Нет, это не было бы хорошее начало вообще. В моем примере я хочу иметь налог* перечисленные файлы, пока Ваше решение просто перечислило бы все каталоги, которые соответствуют шаблону, не показывая их содержание файла. Это - что-то совершенно другое. –  syntaxerror 05.10.2012, 10:47
  • 2
    я не действительно уверен, на что Вы хотите, чтобы вывод был похож. Вы сказали, что только хотите, чтобы файлы в текущем каталоге были перечислены. Попробуйте также ls-ldp *2 010 –  Julian 05.10.2012, 10:51
  • 3
    @syntaxerror - я не понимаю Вашего вопроса также. Вы действительно просили 'только файлы в текущем каталоге', который является тем, что делает этот ответ. Но Ваш комментарий, кажется, хочет инверсию? Все файлы во всех подкаталогах? Можно ли отредактировать вопрос быть более ясными? –  ire_and_curses 05.10.2012, 10:53
  • 4
    Нет на самом деле ничего особенного, чтобы "отредактировать". Так снова: Я хочу, чтобы налог* файлы в текущем каталоге был перечислен, но каталог "invoices2010", который находится в том же рабочем каталоге и который также соответствует данному *2010* подстановочный шаблон должен быть пропущен в списке. –  syntaxerror 05.10.2012, 11:03

Существуют причины не к grep против ls но если Вы игнорируете их, это работает. Используйте ls управляйте как входной массив, звоните ls -ld на каждой записи, переданной по каналу к grep исключить каталоги с выводом, отправленным в пустой указатель, и если успешное эхо исходный вход:

for list in `ls` ; do ls -ld $list | grep -v ^d > /dev/null && echo $list ; done ;

Можно инвертировать grep и условный вывод, те же результаты:

for list in `ls` ; do ls -ld $list | grep ^d > /dev/null || echo $list ; done ;

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

ОТРЕДАКТИРУЙТЕ снова: закрепленные обратные косые черты на/dev/null.

0
27.01.2020, 20:32

Теги

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