Кто-то дал этот скрипт для ротации логов. Я хочу знать, что за этим стоит. Хотя я понимаю все, кроме --exec, что меня немного смущало.

Оригинальный скрипт:

#!/bin/bash

set -x
NOW=$(date +"%m-%d-%Y")
echo $
cd /home/cloud360mssadmin/
find Tahoe-Broadcast.log.*  -exec sh -c 'mv "$0" "/home/cloud360mssread/$0-`date +"%d-%m-%Y"`"' {} \;

Я думаю, что 'echo $' отсутствует переменная.

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

#!/bin/bash
# this is scrpt for the log rotation
set -x
cd /var/log
echo " we are enter the `pwd`"
NOW="$(date +'%d-%m-%y')"
echo $NOW
find vmware* -exec mv '{}'  /home/vinod/ \;
cd /home/vinod/
find vmware* -exec tar -rvf vmware.tar {} \;

Моя задача - вращать журнал и сжимать его.

1 ответ1

0

Пытаться:

sh -c 'echo 0:$0, 1:$1, 2:$2' one two three

это дает:

0:one, 1:two, 2:three

Другими словами, sh -c запускает временный скрипт (echo 0:$0, 1:$1, 2:$2), который получает остальные аргументы sh как свои собственные аргументы. Обычно первый из этих аргументов считается именем команды (но это соглашение).

Итак, в вашем сценарии:

-exec sh -c 'mv "$0" "/home/cloud360mssread/$0-`date +"%d-%m-%Y"`"' {} \;

выполняет:

mv {the_file} /home/cloud360mssread/{the_file}-{timestamp}

что немного надумано, так как:

-exec mv "{}" "/home/cloud360mssread/{}-$(date +"%d-%m-%Y")" \;

работал бы так же хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .