как синхронизировать два каталога?

automatic.sh:

#!/bin/bash
cat $1 | command1 | command2 | command3 > .automatic.sh.temp
rm $1
mv .automatic.sh.temp $1

затем назовите его как:

automatic.sh file

использовать реальный пример:

arthur@a:~$ cat automatic.sh 
#!/bin/bash
cat $1 | grep foo | sed -e 's/foo/bar/g' | sort > $1

arthur@a:~$ cat <<END > foo
> 1 foo
> 2 bar
> 3 foo
> 4 bat
> 5 foo
> END
arthur@a:~$ chmod +x automatic.sh 
arthur@a:~$ ./automatic.sh foo
arthur@a:~$ cat foo
1 bar
3 bar
5 bar

И только быть педантичным, это - немного лучшая форма, чтобы записать, что вывод во временный файл, затем в конце перемещают tempfile через исходный файл.

2
07.04.2014, 01:53
3 ответа
[1123309]Для решения части вопроса с сообщениями об ошибках вы можете выбрать запуск скрипта от cron вместо системной команды.
  • Создайте файл как [1123870]/usr/local/sbin/sync_data.sh[1123871], предоставив право собственности корневой системе и разрешение на выполнение: [1123872]chown root:root /usr/local/sbin/sync_data.sh && chmod 0700 /usr/local/sbin/sync_data.sh[1123873]. Содержимое скрипта приведено ниже.
  • 1
    27.01.2020, 21:50
    [1123273] Инструментом для синхронизации данных является [1123836]rsync[1123837]. Вы можете синхронизировать как на уровне каталога, так и просто его содержимое:

    Примеры

    sync

    content sync

    Первый пример синхронизирует каталог [1123838]Data[1123839] с [1123840]/home/fan[1123841] к каталогу [1123842]/media/T[1123843]. Во втором примере содержимое [1123844]Data[1123845] будет синхронизировано с директорией [1123846]/media/T/Data[1123847].

    ssh -vvv user@host
    
    В качестве дополнительной подсказки я синхронизирую с целевыми директориями, используя эту запись:

    The [1123848]/. [1123849] Я нахожу более очевидным, когда читаю мои команды [1123850]rsync[1123851].

    Примеры поведения

    Использование [1123852]rsync[1123853], вероятно, является одним из самых запутанных вопросов, с которыми я сталкиваюсь при обучении новых пользователей.

    Пример данных:
    1. синхронизация содержимого dir Data

    Заметьте, мы поместили содержимое [1123854]Data[1123855] в [1123856]T[1123857].

    2. синхронизация директории

    [alexus@wcmisdlin02 ~]$ sudo cat /usr/local/uftwf/mysql/_mysql.sh
    #!/bin/sh
    # $Id: _mysql.sh,v 1.2 2011/05/31 16:02:56 alexus Exp $
    
    if [ -d /var/lib/mysql/ ]; then
        cd /var/lib/mysql/
        for i in `ls`; do
                /usr/bin/mysqldump \
                    --user=root \
                    $i > /usr/local/uftwf/mysql/$i.sql
                /bin/gzip \
                    --force \
                    --quiet \
                    /usr/local/uftwf/mysql/$i.sql
        done
        /usr/bin/mysqladmin \
            --user=root \
            flush-logs
        /usr/bin/mysql \
            --user=root \
            --execute='PURGE BINARY LOGS BEFORE subdate(curdate(), INTERVAL 1 DAY);'
    fi
    [alexus@wcmisdlin02 ~]$ 
    
    
    [alexus@wcmisdlin02 ~]$ sudo crontab -l -u mysql
    @daily      /usr/local/uftwf/mysql/_mysql.sh
    [alexus@wcmisdlin02 ~]$ 
    

    Заметьте, мы поместили директорию [1123858]Data[1123859] в [1123860]T[1123861].

    7
    27.01.2020, 21:50
    [1123265] Используя [1123824]rsync[1123825]:

    Добавление дополнительного [1123826]/[1123827] в конце имени исходного каталога скажет [1123828]rsync[1123829], чтобы скопировать содержимое, а не полный каталог. [1123830]rsync[1123831] также позволит избежать копирования файлов с одинаковыми временными метками/размерами (т.е. таких, которые не нужно копировать в 99.99% случаев).

    powershell -File C:\your-path\sleep.ps1
    

    Также подумайте об использовании опции [1123832]--inplace[1123833] для [1123834]rsync[1123835], чтобы ускорить процесс, если вы синхронизируете файлы на одной и той же системе. Из man-страницы:

    Set-ExecutionPolicy RemoteSigned
    

    Есть плюсы и минусы этой опции, однако, вероятно, самая большая загвоздка заключается в том, что если синхронизация прервана, целевой файл останется в непоследовательном состоянии, которое можно исправить только начав все сначала.[1123272].

    2
    27.01.2020, 21:50

    Теги

    Похожие вопросы