У меня есть скрипт, который создает резервную копию, находит файлы старше 30 дней и сжимает их. Теперь проблема, с которой я сталкиваюсь, заключается в том, что если файлов больше одного, как я могу отредактировать скрипт, чтобы он также сжимал все эти файлы. Ниже приведена функция поиска, которую я использую. Пожалуйста, помогите.
Time=+30
PATH_TO_DUMP=/home/tarun/Desktop/Backup
#Find any Backup File defined by the time constraint
file="$(find $PATH_TO_DUMP -type f -mtime $Time)"
#To verify if $file is empty or has some value
if [ ! -n "$file" ]; then
echo "No Earlier Backups were found to compress" >> $PATH_TO_LOG
else
echo "Earlier Backups $file will be compressed" >> $PATH_TO_LOG
gzip $file
fi
Вы можете сделать это с небольшой модификацией
(направьте вывод find в , в то время как цикл выполняет чтение )
Time=+30
PATH_TO_DUMP=/home/tarun/Desktop/Backup
#Find any Backup File defined by the time constraint
find $PATH_TO_DUMP -type f -mtime $Time | while read file
do
#To verify if $file is empty or has some value
if [ ! -n "$file" ]; then
echo "No Earlier Backups were found to compress" >> $PATH_TO_LOG
else
echo "Earlier Backups $file will be compressed" >> $PATH_TO_LOG
gzip "$file"
fi
done
Сжать весь файл с помощью tar
вместо gzip
:
tar jcvf new_file.tar.bz2 $file
tar сохраняет файл
-j
до bzip
tarred файл (используется -z
gzip
)
-c
для создания (-x
для извлечения)
-v
подробный
-f
файл для создания (или открытия) [ 1118]
Извлечь:
tar jxvf new_file.tar.bz2
В противном случае, если вы хотите архив для каждого файла:
echo $file | xargs gzip
xargs читает элементы из стандартного ввода, разделенные пробелами (которые может быть защищен двойными или одинарными кавычками или обратной косой чертой) или символами новой строки и выполняет команду (по умолчанию / bin / echo) один или несколько раз с любыми начальными аргументами, за которыми следуют элементы, считанные из стандартного ввода.