1 (04.03.2015 21:19:36 отредактировано vitalikmondliak)

Всем привет! Помогите пожалуйста. 
Итак, у нас есть файл, скажем, file.conf, в который мы записываем в один столбик слова, эти слова являются названиями файлов и могут быть произвольными. Что должен делать скрипт:
- При первом запуске создает директорию /home/files, содержащую пустые файлы с именами указанными в file.conf
- Потом мы добавляем или удаляем из file.conf одну или несколько строк и запускаем скрипт сново. При этом из /home/files должны удалится файлы, удаленные из file.conf. Или добавиться, если были добавлены записи в файл
Суть, значит, в следующем - внесли изменения в файл, запустили скрипт, увидели соответствующие изменения в директории.
Далее ставим скрипт в cron на выполнение каждых 5 минут.

Проблем с созданием файлом нет, а вот удаление есть проблемы. 

for i in $(cat file.conf); do
touch /home/files/$i
done

Удаление пробую делать вот так, но знаю что это неправильно. Подскажите как сделать правильно...

for f in $(ls /home/files); do
for i in $(cat file.conf);
do
    if [ $f != $i ];
    then
rm /home/files/$f
fi
done
done

2

vitalikmondliak пишет:

for f in $(ls /home/files); do

for f in /home/files/*; do
vitalikmondliak пишет:

for i in $(cat file.conf);

while read i; do
# …
done <file.conf
vitalikmondliak пишет:

if [ $f != $i ];

if [[ "$f" != "$i" ]]
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)
for f in /home/files/*; do
while read i; do
    if [[ "$f" != "$i" ]];
    then
echo $f
fi
done <file.conf
done

4

vitalikmondliak, ну типа того. Хотя нормальные люди для этого юзают rsync.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

Не получается так. Оно мне выводит все значения f по несколько раз, а нужно только те, которых нет в файле file.conf.
Может флаги ставить...даже не знаю. Подскажите пожалуйста что делать.

6 (05.03.2015 23:28:12 отредактировано AntiduPb)

vitalikmondliak пишет:

Подскажите пожалуйста что делать.

#!/bin/bash

strfile=`cat file.conf`
strfile2=`ls -1 aaadir/`
for i in $strfile         
do
    ls aaadir/$i &> /dev/null                   #Проверяем существование файла
    if (( $? == 2 ))                                   #Если не существует
    then                                                  #то
    touch aaadir/$i                                  #создаем
    fi 
done
#
for i in $strfile2                                      #Поочередно присваиваем переменной i имена файлов в директории
do
    grep "^$i$" file.conf &> /dev/null      #Grep'аем эти имена по файлу file.conf на точное совпадение
    if (( "$?" == 1 ))                                 #Если grep ничего не нашел он возвращает 1
    then                                                   #А если grep такого названия в file.conf не нашел
    rm aaadir/$i                                       #удаляем этот файл
    fi
done
exit 0

Вот, если еще нужно.
P.S. Вроде работает. Только пути свои поставьте.

Конечно, это работает в Gentoo!

Работает. Большое спасибо.

8

AntiduPb пишет:

ls aaadir/$i &> /dev/null #Проверяем существование файла

man test

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

9

Проверка существования файла http://www.bash-scripting.ru/abs/chunks/ch07s02.html
Самый первый параметр.

10 (06.03.2015 12:53:09 отредактировано AntiduPb)

drBatty пишет:

man test

Vascom пишет:

Проверка существования файла http://www.bash-scripting.ru/abs/chunks/ch07s02.html
Самый первый параметр.

ok. Спасибо. Буду знать ab Просто на тот момент набыдлокодил как умел  ah
P.S. Про test знал, но до мана как-то не доходил. Прочту.

Конечно, это работает в Gentoo!