Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
google site



Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

Reply
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Search this Thread Display Modes
  #1  
Old 02-08-2010
Registered User
 

Join Date: Feb 2010
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Compare File Differences in different directories

Hello,

I am new to scripting and have been trying to compare two different directories, but with all the same file names in each directory for file changes. I have been doing it in baby steps and have been doing pretty good, but I have hit a few snags. Test 1 and Test 2 work great, but my ultimate end goal is for each file to have a "difference" file instead of one "difference" file. Also, I am using cygwin to do this. I am comparing two identical websites for changes in code.

Test 1 - Works great.

Code:
diff -r "www.website/intranet" "website_2/intranet" | grep -i | tee FileDetailDiff

Test 2 - Works great.

Code:
diff -r -q "www.website/intranet" "website_2/intranet" | tee FileNameDiff

My last step / tutorial for me is to loop through all the files and this is where i keep getting errors.
This does not work. I figure once i get this working i can add the code in to check for file differences.

Code:
#!/bin/sh
find . -type f|grep .asp$ | while read file
do
   echo "$file"
done

here is the error i am getting:

Code:
$ sh textdiff4.sh
textdiff4.sh: line 5: syntax error near unexpected token `done'
textdiff4.sh: line 5: `done'

For the life of me i cannot figure out what is wrong. Any help would be appreciated.

Thanks for taking the time to read this.

Last edited by scottn; 02-09-2010 at 02:22 AM.. Reason: Please use code tags
Sponsored Links
  #2  
Old 02-09-2010
Registered User
 

Join Date: Jan 2010
Posts: 13
Thanks: 0
Thanked 1 Time in 1 Post
syntax for while loop to read a line is


Code:
while read line 
do
....
....
done <$file


Last edited by scottn; 02-09-2010 at 02:22 AM..
  #3  
Old 02-09-2010
Registered User
 

Join Date: Jan 2010
Posts: 4
Thanks: 0
Thanked 0 Times in 0 Posts
HP-UX B.11.23 Performance Monitor tool ?

Is this application for HP-UX ?

Last edited by manijash; 02-09-2010 at 01:33 AM..
  #4  
Old 02-09-2010
Registered User
 

Join Date: Feb 2010
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
I am running this on a windows box using cygwin to run the script.

I tried the following:


Code:
find . -type f -name "*asp" > mylist

cat mylist | while read line
do
echo "Next file is: $line"
done < $line

I am getting the following errors:

Code:
$ sh textdiff4.sh
textdiff4.sh: line 7: $'\r': command not found
textdiff4.sh: line 11: syntax error near unexpected token `done'
textdiff4.sh: line 11: `done < $line'

I can do:

Code:
find . -type f -name "*asp" > mylist
cat mylist

and it executes just fine. For some reason it has to be some ID10T error on my part on why i can't get a simple loop to work

regards

---------- Post updated at 12:41 PM ---------- Previous update was at 11:48 AM ----------

Ok I finally figured it out. I am using notepad++ to create the files, I guess it is adding carriage return line feeds. I ran this command and it removed the carriage return line feeds and it now works


Code:
tr -d '\r' < your_file > newfile

Thanks for every ones help

Last edited by Franklin52; 02-09-2010 at 02:02 PM.. Reason: Please use code tags!
  #5  
Old 02-09-2010
Registered User
 

Join Date: Mar 2008
Posts: 2,204
Thanks: 5
Thanked 40 Times in 39 Posts
Ignoring the MSDOS/unix line terminator issue which you have resolved.

This script is faulty because the input should either come from an inward redirect "<" or from a pipe "while read" but not both!:

Quote:
find . -type f -name "*asp" > mylist

cat mylist | while read line
do
echo "Next file is: $line"
done < $line

Code:
It would be better as:

find . -type f -name "*asp" while read line
do
          echo "Next file is: $line"
done

Or alternatively in the POSIX manner.

find . -type f -name "*asp" > mylist

while read line
do
            echo "Next file is: $line"
done < mylist

Sponsored Links
Reply

Bookmarks

Tags
compare, directory, files

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Compare two text files and Only show the differences CelvinSaran Shell Programming and Scripting 10 02-26-2010 04:56 AM
How to compare two directories... Taranjeet Singh Shell Programming and Scripting 2 04-07-2009 02:20 PM
Compare File Names in Different Directories... stky13 Shell Programming and Scripting 4 05-09-2008 04:36 PM
Compare 2 files for a single column and output differences samit_9999 UNIX for Dummies Questions & Answers 1 04-23-2008 12:02 PM
du -s -k differences between two identical directories csgonan UNIX for Dummies Questions & Answers 6 08-07-2007 10:04 AM



All times are GMT -4. The time now is 07:30 AM.