Сценарий Bash для копирования *.log файлов в новый каталог

Значение по умолчанию httpd.conf файл делает все каталоги недоступными:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

Необходимо настроить Apache для предоставления доступа к каталогу (каталогам):

<Directory "/srv/httpd/htdocs">
    Order allow,deny
    Allow from all
</Directory>

Это как минимум. Вам, возможно, придется сделать некоторые другие вещи. Получите 403 ответа, затем загляните /var/log/httpd/error_log (или везде, где XAMPP помещает его) видеть, что продолжалось.

0
17.12.2012, 22:06
1 ответ

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

#!/bin/bash
tosend=""
for i in *.log; do
    dir=$(echo $i | awk '{split($1,a,"_"); print a[1]}');
    if [ ! -d $dir ]; then
        mkdir $dir;
    fi;
    cp $i $dir;
    tosend="$tosend\n$dir"
done
for i in $(echo -e $tosend | uniq);do
    echo Compressing $i
    tar -zcvf $i.tar.gz $i
    scp $i.tar.gz user@server
done

Ключевая роль использует awk для разделения имени файла и затем сохраняет список папок, которые Вы изменили. Это не является самым изящным, но это работает.

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

Btw, я добавил uniq часть вместо того, чтобы добавить имя к "массиву" в, если, потому что возможно, что папки уже существуют, когда Вы запускаете скрипт.

Однако, если Вы только хотите отправить новые файлы, и Вы выполняете его в полночь, это - вероятно, лучший подход:

#!/bin/bash
tosend=""
for i in *.log; do
    dir=$(echo $i | awk '{split($1,a,"_"); print a[1]}');
    if [ ! -d $dir ]; then
        mkdir $dir;
        tosend="$tosend\n$dir"
    fi;
    mv $i $dir;
done
for i in $tosend;do
    echo Compressing $i
    tar -zcvf $i.tar.gz $i
    scp $i.tar.gz user@server
done

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

Для более сложных/пуленепробиваемых подходов я думаю, что rsync является лучшим выстрелом.

-1
28.01.2020, 05:06
  • 1
  • 2
    @balkian, конечно, я хочу понять, но я являюсь новым в этом, и я хочу учиться, здесь я не понимаю, как Вы проверяете имя файла и делаете каталог с тем же именем? –  Jimmy A 17.12.2012, 22:19
  • 3
    Jimmy, я предлагаю, чтобы Вы проверили это учебное руководство или что-то подобное, чтобы познакомиться с ударом. –  balkian 17.12.2012, 22:37
  • 4
    @balkian я читаю это. но мой вопрос состоит в том, которые в здесь всех *.log файлах помещаются в новую папку, что, если я хочу, чтобы все файлы, датированные сегодня, были помещены там? я имею в виду в здесь 2012-12-17_083213, моя папка, и затем в ней у меня есть .log и .log_stats и и т.д. с этим именем в ней? –  Jimmy A 18.12.2012, 00:36

Теги

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