Как предложено в комментариях, Вы могли также использовать inotify
хотя это - излишество. Безусловно самое простое должно использовать watch
. Вот один способ сделать это с inotify
:
Установите inotify-tools
пакет
sudo apt-get install inotify-tools
Использовать inotifywatch
проверять Ваш файл на изменения. Выполните его в цикле и cat
файл, если изменение обнаруживается (вот почему я grep
для строки total
):
while true; do
inotifywatch -e modify -t 1 kk 2>/dev/null | grep -q total &&
echo "$(date;cat kk)";
done
Если я понимаю, что вам нужно, самый простой способ - это цикл for:
myList="server1 server2 server4 server5 server6 server7 server8 server9 server10"
for myDir in $myList ; do cp server3/* $myDir/ ; done
cp
может обрабатывать несколько источников, но не может обрабатывать несколько адресатов.
Вы можете использовать echo dir1 dir2 dir3 | xargs -n 1 cp file1
это скопирует, например, file1
в dir1
, dir2
и dir3
.
Другая модификация - echo dir1 dir2 dir3 | xargs -n 1 cp / home / test / server3 / *
, который скопирует все файлы из указанного каталога в отображаемые каталоги.
Дополнительное решение, которое немного короче (без необходимости вводить имена каталогов):
ls -1 | grep -v server3 | xargs -n 1 cp server3 / *
Наконец, похоже на дубликат
Пример добавления для первого решения:
# creating sample dir structure
[shadowe@shadow Desktop]$ mkdir server1
[shadowe@shadow Desktop]$ mkdir server2
[shadowe@shadow Desktop]$ mkdir server3
[shadowe@shadow Desktop]$ touch server3/test.one
[shadowe@shadow Desktop]$ touch server3/test.two
[shadowe@shadow Desktop]$ ls -R
./server1:
./server2:
./server3:
test.one test.two
# executing solution
$ echo /home/shadowe/Desktop/server2/ /home/shadowe/Desktop/server1/ | xargs -n 1 cp /home/shadowe/Desktop/server3/*
# verifying solution
[shadowe@shadow Desktop]$ ls -R
./server1:
test.one test.two
./server2:
test.one test.two
./server3:
test.one test.two
Пример добавления для второго решения:
# showing directories structure and initial state
$ ls -R
server1:
server2:
server3:
test.one test.two
server4:
server5:
server6:
# executing command
$ ls -1 | grep -v server3 | xargs -n 1 cp server3/*
# checking results
$ ls -R
./server1:
test.one test.two
./server2:
test.one test.two
./server3:
test.one test.two
./server4:
test.one test.two
./server5:
test.one test.two
./server6:
test.one test.two
Как видно, обе команды скопировали все файлы в server3
в другие каталоги, так что это вопрос предпочтений и варианта использования.
Самый простой способ сделать это за один цикл:
for i in ./server*; do cp ./server3/testfile* "${i}"; done
Он скопирует содержимое каталога server3
в каждый каталог по текущему пути.
Это также попытается скопировать файлы в тот же самый каталог, но только распечатает, что это те же самые файлы и продолжит.
Редактирование:.
Чтобы избежать неприятных сообщений об ошибках, можно увеличить цикл с помощью более специфического подстановочного знака. Например, чтобы пропустить server3
, используйте следующее: server[1-24-9]