Bash скрипт для копирования всех файлов с той же структурой каталогов
Life-Hack [Жизнь-Взлом]/ХакингЭтот скрипт оболочки предназначен для конкретной задачи, необходимой для нашего сервера.
Задача
Наша задача — скопировать все файлы, созданные в каталоге, в другой каталог с такой же структурой каталогов.
Скрипт будет запускаться с регулярным интервалом, искать все файлы, созданные в исходном каталоге, и копировать их в каталог назначения.
Скрипт должен поддерживать ту же структуру каталогов в каталоге назначения.
После этого он изменит права в каталоге назначения.
После успешного копирования файла скрипт должен удалить файлы из исходного каталога.
Shell скрипт резервного копирования Linux
Создайте скрипт оболочки в вашей системе и добавьте содержимое, показанное ниже.
Обновите исходные и целевые каталоги в нужном месте.
После сохраенения не забудьте сделать скрипт исполняемым:
chmod +x script.sh
#!/bin/bash
##################### переменные #############################
### Установите правильное местоположение источника и места назначения
SOURCE_DIR="/source/dir/"
DEST_DIR="/desination/dir/"
TMP_FILE=/tmp/copyfileslist.txt
### Установите имя пользователя и имя группы, чтобы установить права на скопированные файлы
### Установите для CHANGE_OWNERSHIP значение 1, чтобы изменить владельца, или 0, чтобы не изменять его.
CHANGE_OWNERSHIP=1
USER='root'
GROUP='root'
########### Не редактируйте, пока не потребуется #################
### Проверка, существует ли исходный каталог
### Скрипт остановится, если источника не существует
if [ -d "${SOURCE_DIR}" ]; then
echo "Source directory found"
else
echo "Source directory not found. Please check above variables are set correctly"
echo "script exited"
exit 1
fi
### Проверка, существует ли каталог назначения
### Скрипт создаст каталог назначения, если он не существует.
### Если не удалось создать каталог, скрипт будет прерван
if [ -d "${DEST_DIR}" ]; then
echo "Destination directory found, all ok"
else
echo "Destination directory not found, creating now"
mkdir -p "${DEST_DIR}"
if [ $? -eq 0 ]; then
echo "Successfully created destination directory."
else
echo "Failed to create destination directory. Script exited"
exit 1
fi
fi
### Копирование всех файлов, доступных в исходном каталоге
### После успешного копирования файла скрипт удалит их из исходного каталога.
cd "${SOURCE_DIR}"
if [ $? -eq 0 ]; then
find . -type f > ${TMP_FILE}
while read CURRENT_FILE_NAME
do
cp --parents "${CURRENT_FILE_NAME}" "${DEST_DIR}"
if [ $? -eq 0 ]; then
echo "File ${CURRENT_FILE_NAME} successfully copied."
rm -f "${CURRENT_FILE_NAME}"
else
echo "File ${CURRENT_FILE_NAME} failed to copy"
fi
done < ${TMP_FILE}
rm -f ${TMP_FILE}
fi
## Установка прав на новые файлы
if [ ${CHANGE_OWNERSHIP} -eq 1 ]; then
sudo chmod 775 -R "${DEST_DIR}"
sudo chown ${USER}:${GROUP} -R "${DEST_DIR}"
fi
################### Конец скрипта ###################################