Awk|Bash - kopiowanie plików z zachowaniem wersji poprzedniej.
Strona główna Ubuntu C++ Hardware HTML i javascript Java Software SQL

Awk|Bash - kopiowanie plików z zachowaniem wersji poprzedniej.

Dodano: 2012-03-23

Kopiowanie plików do miejsca docelowego z równoczesnym zachowaniem kopi elementu celu, jeżeli już istnieje w danej lokalizacji, jest przydatne jeżeli chcemy zachować historię zmian wykonwywanych w tych plikach.

Skrypt w języku bash nazwany cps (copy safe) przyjmuje dwa parametry. Pierwszy to ścieżka do pliku, który ma zostać skopiowany, drugi parametr to ścieżka do folderu docelowego.

W przypadku istnienia plliku w miejscu docelowym i mającego różna sumę kontrolną następuje najpierw wykonanie jego backupu ([nameFile].[dateTime]), a następnie skopiowanie pliku ze źródła. Skrypt poniżej.

drukowanie kodu zaznaczanie kodu

#!/bin/bash

#echo Script make copy file to destination, if elements exists in folder
#echo do backup file [namefile].[dateTime]

if [ "$2" = "" ]; then
	echo "Prarametr secondary not exists!!!"
	exit 10;
fi

if [ ! -f $1 ]; then
	echo "File '"$1"' not found!!!";
	exit 1;
fi

if [ ! -d $2 ]; then
	echo "Folder '"$2"' not found!!!";
	exit 1;
fi

dt=$2"/"`basename $1`
if [ -f $dt ]; then
	#echo "File "`basename $1`" exists in destination."

	md5File1=`md5sum $1 | awk 'BEGIN{}{print $1}'`;
	md5File2=`md5sum $dt | awk 'BEGIN{}{print $1}'`;
	if [ $md5File1 == $md5File2 ]; then
		echo "File '"`basename $1`"' in destination are the same md5sum.";
		exit 0;
	else
		echo "Making backup '"$dt"'...";
		cp $dt $dt.`date +%y%m%d`_`date +%H%M%S`
	fi
fi

echo "Start coping file '"`basename $1`"'...";
cp $1 $2