LINUX.ORG.RU

Проверить существование файла

 , , ,


0

2

Добрый, нужна помощь Нужно одной строкой на bash проверить существование файла/директории, если существует - вывести путь, если не существует - ничего не выводить сейчас делаю так

test -r /boot/loader.conf && echo /boot/loader.conf

нужно упростить, чтоб не писать два раза проверяемый путь, т.к. проверок планируется много (конфиг Bacula)



Последнее исправление: kovalchukes (всего исправлений: 2)

a=/boot/loader.conf
$a

anonymous
()

f=/boot/loader.conf ; test -r $f && echo $f

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

Не подходит ни один из способов

backup# ls -d /boot/loader.conf

/boot/loader.conf

backup# ls -d /boot/loader.conf1

ls: /boot/loader.conf1: No such file or directory

backup# ls /boot/loader.conf 2>/dev/null

ls: 2: No such file or directory

backup# f=/boot/loader.conf ; test -r $f && echo $f

f=/boot/loader.conf: Command not found.

f: Undefined variable.

kovalchukes
() автор топика

должна быть именно команда, а не часть скрипта, т.к. передается как команда на удаленную машину

kovalchukes
() автор топика
Ответ на: комментарий от anonymous
a=/boot; [ -e "$a" ] && echo $a
/boot

a=/bot; [ -e "$a" ] && echo $a

a=/etc/fstab; [ -e "$a" ] && echo $a
/etc/fstab

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

backup# f=/boot/loader.conf ; test -r $f && echo $f
f=/boot/loader.conf: Command not found.
f: Undefined variable.

Фряха, небось? Тогда при чём тут bash?

AnDoR ★★★★★
()
Ответ на: комментарий от kovalchukes
ivan@debian:~$ ls /home/ivan/Downloads 2>/dev/null
lrwxrwxrwx 1 ivan ivan 17 Июл 11 19:55 /home/ivan/Downloads -> Загрузки/
ivan@debian:~$ ls /home/ivan/Downloads1 2>/dev/null

У меня работает....

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

клиенты - те на которых будет выполняться команда разные freebsd 8-9, debian, cenots, потому нужно универсальное решение

kovalchukes
() автор топика
Ответ на: комментарий от solovey

да, на debain - то что нужно, на freebsd

backup# ls /home/ivan/Downloads > /dev/null 2>&1 Ambiguous output redirect.

kovalchukes
() автор топика
Ответ на: комментарий от AnDoR

Bacula - система резервного копирования, хочу сделать единое правило для всех OS - описать какие файлы нужно резервировать.

Указываю пути - если в OS нет этого пути (к примеру /boot/loader.conf в debian) то задание заканчивается с ошибкой.

Есть возможность передавать на резервируемые клиенты не точный путь - а команду, которая вернет путь файла/директории для сохранения.

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

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

Мой тебе совет: лучше сделай различные правила для фри и для линуксов.

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

или даже - stat --print=«%n» /path/to/file.name 2> /dev/null

ananas ★★★★★
()

Где теги «лаба», «срочно» и «без СМС»?

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

те на которых будет выполняться команда разные freebsd 8-9, debian, cenots, потому нужно универсальное решение

Не надо пытаться искать общие элементы синтаксиса между Башем и Си-шеллом. Ограничьтесь возможностями, гарантированными Позиксом для любой юникс-подобной системы. Например в данном случае, исполняйте что-нибудь такое:

% sh -c 'f="/tmp/" && [ -e "$f" ] && echo "$f"'

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

должна быть именно команда, а не часть скрипта, т.к. передается как команда на удаленную машину

Разложи на целевых машинах скрипты.

sin_a ★★★★★
()

ТС читай ABS срочно.

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

Ты походу не в курсе, что в той же фряхе bash совсем не обязательно установлен. А если и установлен, то бинарник лежит в /usr/local/bin/bash.

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

Ты походу не с экрана текст читаешь, а откуда-то из своей, сугубо интимной бездны.

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