LINUX.ORG.RU

[bash][if] файлы

 ,


0

2

всем привет.

необходимо выполнить определенные действия, если существует(ют) определенный(е) файл(ы).

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

if [ -f filename ]; then
    some commands here
fi

но дело в том, что файлов может быть от 0 до n, и проверять их нужно по маске, навроде filename.log.*, [ -f ... ] в таком случае уже не катит...

есть идея, сделать ls filename.log.* | wc -l и сравнить результат с 0, только надо будет еще перенаправить stderr в /dev/null, ибо если файлов таких нет вообще, то ls ругнется...

есть какие-нибудь более прямые способоы? посоветуйте что-нибудь :)

если нужно для каждого файла что-то делать в блоке if, то можно использовать

for i in `ls filename.log.*`
do
    some commands
done

najar
()
Ответ на: комментарий от najar

да один фиг, так тоже можно, только надо перенаправлять stderr в /dev/null обязательно, иначе если файлов нет, то будет

for i in `ls qwe.*`; do echo $i; done
/bin/ls: qwe.*: No such file or directory

а мне этого совсем вот не надо...

Cy6erBr4in ★★★
() автор топика

Найти в текущем каталоге все файлы c расширением txt и содержимым, в котором есть слово linux: find . -name '*.txt' | xargs grep «linux» (с)Дзен консоли

kulti ★★
()
Ответ на: комментарий от sin_a

А так разве не будет работать?

Будет, но с таким синтаксисом непонятно как поток ошибок перенаправить

najar
()
Ответ на: комментарий от najar

> Будет, но с таким синтаксисом непонятно как поток ошибок перенаправить

sinaps@test:~$ for i in 1 2 3 ; do echo $i ; done
1
2
3
sinaps@test:~$ for i in ; do echo $i ; done
sinaps@test:~$

Да вроде нет, ошибок-то. Ну будет пустой список, ни одной команды не выполнится.

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

Хотя нет, bash в этом случае выдает *

sinaps@test:~/tmp$ ls
sinaps@test:~/tmp$ for i in * ; do echo $i ; done
*
sinaps@test:~/tmp$ touch 123
sinaps@test:~/tmp$ for i in * ; do echo $i ; done
123
sinaps@test:~/tmp$

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

спасибо, много хороших идей, обязательно воспользуюсь.

Cy6erBr4in ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.