#!/bin/bash
###################### COPYRIGHT/COPYLEFT ######################
# (C) 2016 Intel Deutschland GmbH
# Author: Michael Soegtrop
#
# Released to the public by Intel under the
# GNU Lesser General Public License Version 2.1 or later
# See https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
###################### DIFF A TAR FILE AND A FOLDER ######################
set -o nounset
# Print usage
if [ "$#" -lt 2 ] ; then
echo 'Diff a tar (or compressed tar) file with a folder'
echo 'difftar-folder.sh [strip]'
echo ' is the name of the tar file do diff with (required)'
echo ' is the name of the folder to diff with (required)'
echo ' is the number of path components to strip from tar file (default is 0)'
echo 'All files in the tar file must have at least path components.'
echo 'This also adds new files from folder.new, if folder.new exists'
exit 1
fi
# Parse parameters
tarfile=$1
folder=$2
if [ "$#" -ge 3 ] ; then
strip=$3
else
strip=0
fi
# Get path prefix if --strip is used
if [ "$strip" -gt 0 ] ; then
# Get the path/name of the first file from the tar and extract the first $strip path components
# This assumes that the first file in the tar file has at least $strip many path components
prefix=$(tar -t -f "$tarfile" | head -1 | cut -d / -f -$strip)/
else
prefix=
fi
# Original folder
orig=$folder.orig
mkdir -p "$orig"
# New amd empty filefolder
new=$folder.new
empty=$folder.empty
mkdir -p "$empty"
# Print information (this is ignored by patch)
echo diff/patch file created on "$(date)" with:
echo difftar-folder.sh "$@"
echo TARFILE= "$tarfile"
echo FOLDER= "$folder"
echo TARSTRIP= "$strip"
echo TARPREFIX= "$prefix"
echo ORIGFOLDER= "$orig"
# Make sure tar uses english output (for Mod time differs)
export LC_ALL=C
# Search all files with a deviating modification time using tar --diff
tar --diff -a -f "$tarfile" --strip $strip --directory "$folder" | grep "Mod time differs" | while read -r file ; do
# Substitute ': Mod time differs' with nothing
file=${file/: Mod time differs/}
# Check if file exists
if [ -f "$folder/$file" ] ; then
# Extract original file
tar -x -a -f "$tarfile" --strip $strip --directory "$orig" "$prefix$file"
# Compute diff
diff -u "$orig/$file" "$folder/$file"
fi
done
if [ -d "$new" ] ; then
diff -u -r --unidirectional-new-file "$empty" "$new"
fi
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet)
¤
|
Haftungshinweis
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.
|