Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 14.04.2016
Сообщений: 55
1

Вывести имена файлов текущего каталога, начинающиеся на букву a или b, в которые можно записывать данные

02.04.2018, 21:45. Просмотров 4423. Ответов 11

Помогите, пожалуйста. Нужно вывести имена файлов текущего каталога, начинающиеся на букву a или b, в которые можно записывать данные.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2018, 21:45
Ответы с готовыми решениями:

Вывести имена всех файлов из текущего каталога
При нажатии на левую кнопку мыши вывести имена всех файлов из текущего каталога. Помогите...

Вывести на экран имена файлов из определённого каталога, начинающиеся на цифру
Вывести на экран имена файлов из каталога К (имя файла начинается на цифру); @echo off dir E:\K...

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

Вывести имена подкаталогов из текущего каталога содержащие в себе подкаталоги
Разработать программу, которая выводит на экран имена тех каталогов, которые находятся в текущем...

11
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
02.04.2018, 22:11 2
Лучший ответ Сообщение было отмечено Ananazzz как решение

Решение

Код
for f in *; do [[ -f "$f" && -w "$f" && $(basename "$f") == [ab]* ]] && echo "$f"; done
Добавлено через 2 минуты
если строго только в текущей дире, то $(basename "$f") == [ab]* можно заменить на "$f" == [ab]*
0
0 / 0 / 1
Регистрация: 14.04.2016
Сообщений: 55
02.04.2018, 22:25  [ТС] 3
Цитата Сообщение от blz Посмотреть сообщение
for f in *;
при выполнении ругается на эту строчку: ./exs_3: line 2: syntax error near unexpexted token 'in*'
./exs_3: line 2: 'for f in*'
0
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
02.04.2018, 22:27 4
Цитата Сообщение от Ananazzz Посмотреть сообщение
ругается на эту строчку
'in*'. а у меня разве так написано?
0
0 / 0 / 1
Регистрация: 14.04.2016
Сообщений: 55
02.04.2018, 22:30  [ТС] 5
Цитата Сообщение от blz Посмотреть сообщение
'in*'. а у меня разве так написано?
вот код, что у меня в файле
Bash
1
2
#!/bin/bash
for f in *; do [[ -f "$f" && -w "$f" && "$f" == [ab]* ]] && echo "$f"; done
0
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
02.04.2018, 22:32 6
Цитата Сообщение от Ananazzz Посмотреть сообщение
unexpexted token 'in*'
отсюда видно, что не in * было на момент той ошибки, а in*
0
0 / 0 / 1
Регистрация: 14.04.2016
Сообщений: 55
02.04.2018, 22:40  [ТС] 7
Цитата Сообщение от blz Посмотреть сообщение
отсюда видно, что не in * было на момент той ошибки, а in*
исправила на in *. ничего не изменилось, ошибка та же. а за что отвечает тогда in *?

Добавлено через 4 минуты
Цитата Сообщение от blz Посмотреть сообщение
отсюда видно, что не in * было на момент той ошибки, а in*
Ошибка с моей стороны и довольно глупая. Все работает, спасибо Вам большое!
0
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
02.04.2018, 22:40 8
Цитата Сообщение от Ananazzz Посмотреть сообщение
исправила на … ничего не изменилось, ошибка та же
так быть не может, проверьте еще раз.

* отвечает за globbing. но Вы все равно не будете же man читать?

Код
~ $ for f in *; do [[ -f "$f" && -w "$f" && "$f" == [abq]* ]] && echo "$f"; done
qphotorec.log
quinails.svg
0
Модератор
Эксперт NIX
2775 / 2025 / 678
Регистрация: 02.03.2015
Сообщений: 6,497
04.04.2018, 11:10 9
blz, а зачем Вы так усложнили код? Не всегда надо дословно следовать условию
Bash
1
find -type f -name '[ab]*' -writable
0
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
04.04.2018, 12:25 10
Цитата Сообщение от Marinero Посмотреть сообщение
Не всегда надо дословно следовать условию
классический пример базиса для бардака. из практики платит деньгами или временем именно тот, кто небрежно относится к формулировке и/или выполнению условий. из практики я довольно давно уяснил, что четкое ТЗ – всегда экономия, вне зависимости сколько на это уйдет времени.

Цитата Сообщение от Marinero Посмотреть сообщение
усложнили код
спорный момент. для начала – find это одна из тех старых и страшных команд наряду со screen, которые давно следует переписать, но ввиду традиций (как например ifconfig) они еще долго будут вылазить из темных углов.

далее – find здесь лишняя сущность (внешняя команда) с более сложным синтаксисом и менее очевидным поведением – нежели чем проверки, встроенные в интерпретатор.

еще далее – если нам нужна генерация файлов с более сложными условиями, чем доступные в позикс интерпретаторе (а также более эффективный shell-код), то логичнее взять zsh и изначально не наступать на многие грабли, характерные для парсинга вывода внешних команд.

еще из практики – а скажите навскидку, в чем отличия синтаксиса и реализации find в findutils и встроенного в бизибокс? а вот код шелла (если исключить башизмы) будет один и тот же и в терминале бубнотушечки, и в роутере и в инитраме.
0
Модератор
Эксперт NIX
2775 / 2025 / 678
Регистрация: 02.03.2015
Сообщений: 6,497
04.04.2018, 16:26 11
blz, Вы не уловили суть моего предложения по сему и растеклись "мысью по древу". Пусть будет Ваш вариант
Bash
1
for f in [ab]*; do [ -f "$f" -a -w "$f" ] ...
который отработает на порядок быстрее, а уж тем более find, что никак не соответствует
Цитата Сообщение от blz Посмотреть сообщение
find здесь лишняя сущность (внешняя команда) с более сложным синтаксисом и менее очевидным поведением – нежели чем проверки, встроенные в интерпретатор.
Тем более что Вы сами же противоречите, т.к. [[ и && как раз те самые "башизмы" которые не будут работать в том же бизибокс.
0
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
04.04.2018, 17:47 12
есть башизмы и есть башизмы. я нигде за последние лет 5 как минимум не натыкался (кроме встроенного в груб шелла, но это малорелевантно) на то, что [[ и && не работают, также как ${param:o:l} или ${param:s:r}. надо признать, что нынче это стандарт де-факто. В противоположность расширенному глоббингу, массивам итд – с ними «стандартизация» вряд ли случится, потому как сильно разошлись оные концепции и реализации в популярных шеллах, которых сейчас и осталось то 3.5 штуки максимум.

Код
$ bash --posix
bash-4.4$ [[ -e /etc/resolv.conf && ! -d /etc/resolv.conf ]] && echo 'file found!'
file found!
bash-4.4$ exit
$ busybox sh
~ $ [[ -e /etc/resolv.conf && ! -d /etc/resolv.conf ]] && echo 'file found!'
file found!
root@OpenWrt:~# echo $0
-ash
root@OpenWrt:~# [[ -e /etc/resolv.conf && ! -d /etc/resolv.conf ]] && echo 'file found!'
file found!
в посудомойке правда не проверил еще ;-)

Цитата Сообщение от Marinero Посмотреть сообщение
не будут работать в том же бизибокс
если бы это было бы так, я бы сейчас сидел бы без инитрамы и не мог бы загрузиться

а сути я правда не уловил. насчет нечетких условий – у меня к ним идиосинкразия, да. но в техническом разрезе это правильно, мы же не об успешных продавайках тут беседуем.
про «сложно»? конечно, я не помню всех операторов проверок файлов в шелле, как и не помню всех параметров find. однако первое подглядеть быстрее и проще, ибо там все на одну страничку влазит – в отличие от «тааак, а как у нас тут дела по умолчанию с симлинками? поиск, листаем, читаем, итд». ну и -a x && -b x && … – однородная конструкция, читается она проще.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2018, 17:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выдать на экран отсортированное содержимое тех файлов, которые являются файлами текущего каталога
Всем доброго времени суток! Задание такое: Написать bat-файл, который содержит 3 параметра 1-й...

Вывести имена первых десяти файлов каталога
Вывести имена первых десяти файлов каталога /etc с расширением ".conf" .

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

Вывести имена, размер, дату создания и атрибуты файлов и подкаталогов каталога Windows
Задача: Вывести имена, размер, дату создания и атрибуты файлов и подкаталогов каталога Windows....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.