IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Пингвинятник (ОС *NIX) (http://www.imho.ws/forumdisplay.php?f=76)
-   -   Вопрос по условию проверки наличия файлов по маске в шелле (http://www.imho.ws/showthread.php?t=144346)

The Pig 15.08.2010 00:42

Вопрос по условию проверки наличия файлов по маске в шелле
 
хочу:

if [ ! -f /abc/de/\*.zip ]
then.....

это я так пытался проверить, есть ли в фолдере хоть один zip-файл.
не работает, хоть тресни. Получается, что в таких выражениях wildcards не применимы?

Hubbitus 16.08.2010 12:14

Цитата:

Сообщение от The Pig (Сообщение 1719748)
Но вот не нашёл такой штуки, так что пользуясь случаем, хочу:

if [ ! -f /abc/de/\*.zip ]
then.....

В свете треда, сразу скажу, говорю про баш. Более того, тема для отдельного треда. Если будем продолжать - вынесу в отдельную. Впредь так не делайте пожалуйста.
Да какой wildcard? У Вас же звездочка экранирована! То есть он проверяет исключительно наличие файла с именем "*.zip"!
И вообще, в задаче проверки нескольких файлов, команда test (и ее короткий алиас [) сравнивают числа и строки. То есть в Вашем случае, если глобинг (когда он будет, не как сейчас) будет раскрыт в один единственный файл - то сравнение даст нужный Вам вариант, если оно не раскроется вообще - то будет опять проверено наличие файла "*.zip", если раскроется в больше чем один файл - будет ошибка количества аргументов сравнения. То есть так делать в принципе нельзя.

The Pig 17.08.2010 08:21

Цитата:

Сообщение от Hubbitus (Сообщение 1719792)
В свете треда, сразу скажу, говорю про баш. Более того, тема для отдельного треда. Если будем продолжать - вынесу в отдельную.

Да выносите, нет проблем. Смысл вашего ответа "так нельзя". Это я уже заметил, оно не работает. А что именно помешало вам присовокупить "нужно вот так:" ?

Я решил эту проблему вот таким корявым копипастом:
if [ "$(ls -A *.zip 2>/dev/null)" ]
then ...

Мои индийские коллеги делают это же направляя результат ls в файл и считая строчки в этом файле.

Hubbitus 17.08.2010 13:01

Я бы сделал так:
Код:

if [ $(ls -1A *.php 2>/dev/null | wc -l) -gt 0 ]
Но, как всегда, путей много, и думаю Ваш ничем не хуже.


Часовой пояс GMT +4, время: 07:04.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.