Anas R.
Anas R.

Reputation: 367

How to generate DEBIAN/md5sums file in this file structure?

I have the following file structure to build a Debian package, which doesn't contain any binary file (compiling task):

source/
source/DEBIAN
source/etc
source/usr
build.sh

The content of build.sh file is:

#!/bin/bash
md5sum `find . -type f | awk 'source/.\// { print substr($0, 3) }'` > DEBIAN/md5sums
dpkg-deb -b source <package-name_version>.deb

The problem is that the md5sum command here considers also DEBIAN/ files when making DEBIAN/md5sums file. I want to except DEBIAN/ files from the md5sum process.

Upvotes: 1

Views: 3982

Answers (3)

tripleee
tripleee

Reputation: 189908

Your Awk script contains a syntax error and probably some sort of logic error as well. I guess you mean something like

md5sum $(find ./source/ -type f |
  awk '!/^\.\/source\/DEBIAN/ { print substr($0, 3) }') > DEBIAN/md5sums

Equivalently, you could exclude source/DEBIAN from the find command line; but since you apparently want to postprocess the output with Awk anyway, factoring the exclusion into the Awk script makes sense.

The upgrade from `backticks` to $(dollar-paren) command substitution is not strictly necessary, but nevertheless probably a good idea.

Apparently, this code was copy/pasted from a script which uses substr to remove the leading ./ from the output from find. If (as indicated in comments) you wish to remove more, the script has to be refactored, because you cannot (easily) feed relative paths to md5sum which are not relative to the current directory. But moving more code to find and trimming the output with a simpler Awk script works fine:

find ./source -path '*/DEBIAN' -prune -o -type f -exec md5sum {} \; | 
awk '{ print $1 "  " substr($2, 10) }'

Upvotes: 2

Roberto De Oliveira
Roberto De Oliveira

Reputation: 129

find could ignores files specifying a pattern inside their path:

find . -type f -not -path "*DEBIAN*"

Upvotes: 2

lmz
lmz

Reputation: 1580

Try filtering the results of find through e.g. grep -v to exclude:

find . -type f | grep -v '^./source/DEBIAN/' | ...

Or you can probably do the filtering in awk as well...

Upvotes: 1

Related Questions