Я пытаюсь написать скрипт .sh
, где в определенный момент он проверяет, есть ли в текущем каталоге один или несколько файлов, соответствующих *\_??\_??\_64kbs.mp3
ИЛИ, используя регулярное выражение ^.*\_..\_..\_64kbs\.mp3$
Это одна попытка команды:
if [ 'ls *_??_??_64kbs.mp3 2>/dev/null | wc -l ' == 0 ];
then echo "nothing";
else echo "something";
fi
я знаю это
'ls *_??_??_64kbs.mp3 2>/dev/null | wc -l'
в этом случае возвращает на терминал только число 9, потому что есть 9 совпадений. Если я удалю первый '?', он вернет 0, как и должно быть, потому что нет имен файлов, соответствующих этому выражению. Но вывод приведенного выше выражения if всегда «что-то».
РЕДАКТИРОВАТЬ: кто-то попросил полное имя файла образца для того, что я пытаюсь сопоставить. Вот один:
George-1983_1A_01_64kbs.mp3
$?
- person Aif   schedule 28.03.2017'ls ....'
0
, чего никогда не бывает. - person mata   schedule 28.03.2017glob
иregex
, что здесь является правильным подходом. - person Inian   schedule 28.03.2017ls
для поиска файлов. Вместо этого используйтеfind
. - person ceving   schedule 28.03.2017$?
напрямую. Все конструкции управления потоком проверяют эту переменную за кулисами, поэтому вам не нужно этого делать. Так чтоcmd; if [ $? == 0 ]; then
... лучше писатьif cmd; then
... - person tripleee   schedule 28.03.2017