The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com



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

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Using Rename to move files snufse UNIX for Dummies Questions & Answers 1 04-09-2008 12:57 PM
rename multiple files antointoronto Shell Programming and Scripting 13 03-20-2008 10:16 AM
Move and rename files in seq. with padded digits rocinante Shell Programming and Scripting 9 06-09-2007 10:37 PM
Move files and rename ?? sabercats Shell Programming and Scripting 1 03-22-2006 04:16 PM
Rename Multiple Files molonede UNIX for Dummies Questions & Answers 1 11-14-2000 12:40 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 08-25-2007
Trapper Trapper is offline
Registered User
  
 

Join Date: Aug 2007
Posts: 5
Find, Append, Move & Rename Multiple Files

Using a bash script, I need to find all files in a folder "except" the newest file. Then I need to insert the contents of one text file into all the files found. This text needs to be placed at the beginning of each file and needs a blank line between it and the current contents of the file. Then I need to move all those modified files to another folder and change the extension portion of their name from .log to .101

My bash skills are absolutely nil. I have used find and can find all the files I want and I have managed to use paste to paste into "1" file but cannot figure out how to do this entire routine for all the found files.

They switched over to linux here and the windows app that creates these files is now running on wine. For some reason the dos batch file I used to do this routine fails to work on wine.
  #2 (permalink)  
Old 08-25-2007
ghostdog74 ghostdog74 is offline Forum Advisor  
Registered User
  
 

Join Date: Sep 2006
Posts: 2,509
if you are ok, post your batch code. There's equivalent unix commands you can use and people here may guide you on which ones to use.. then you can start to learn shell...
  #3 (permalink)  
Old 08-26-2007
anchal_khare anchal_khare is offline
Registered User
  
 

Join Date: Jun 2007
Location: Mumbai,India
Posts: 325
cudnt understand ur queries...
just paste ur code to get an idea what u are trying to do...
  #4 (permalink)  
Old 08-26-2007
Trapper Trapper is offline
Registered User
  
 

Join Date: Aug 2007
Posts: 5
Here's the dos batch code. I note that in my original post that I failed to mention that the original files I am working with also get moved off to an archive, unmodified. There's never a filename conflict because each original file has a date name ( s082607.log, etc ). I've explained each step in the process. I have no doubt this dos batch could be more efficient but I am no dos batch pro. The script did work correctly for over 3 years in both NT4 and Win2K. It just doesn't run under wine NT4 or Win2k emulation even though the drive and directory layouts remain the same. Perhaps the wine cmd interpreter doesn't like the code or something.

Code:
:::: Find all logs except most recent ::::
for /f "skip=1 delims=" %%a in ('dir /a-d /b /o-d "d:\buzzard\logs\s-series\*.log" ')

:::: Append a text header message to each found file and copy to a temp dir :::::
do copy d:\buzzard\scripts\addon.txt+d:\buzzard\logs\s-series\"%%a" d:\buzzard\temp\sendlogs\s-series\"%%a"

::::: Rename modified files :::::
ren d:\buzzard\temp\sendlogs\s-series\*.log *.101

::::: Move the modified files to a mail queue for future delivery ::::
move d:\buzzard\temp\sendlogs\s-series\*.101 e:\promail\queue\

::::: Move originals - except most recent - off to an archive :::::
for /f "skip=1 delims=" %%b in ('dir /a-d /b /o-d "d:\buzzard\logs\s-series\*.log" ') do move d:\buzzard\logs\s-series\"%%b" "f:\buzzard\logs\s-series\
  #5 (permalink)  
Old 08-29-2007
Trapper Trapper is offline
Registered User
  
 

Join Date: Aug 2007
Posts: 5
Well, I have made a bit of headway in converting this MS-DOS batch over to bash. This seems to work from a terminal. Have yet to try it in a script. I have no doubt there's a much easier, much shorter, and more correct way to do all this but it's what I've figured out so far. There's also one problem that arises concerning the pasting to append a glue header to the logs.

Code:
::: Find all files except the current file and move to a temp dir :::
cd /home/trapper/.wine/drive_d/buzzard/logs/s-series
find . -daystart -mtime +0 -exec mv {} /home/trapper/.wine/drive_d/buzzard/temp \;
Code:
::: Paste glue header and each log file to new files in the queue :::
for i in /home/trapper/.wine/drive_d/buzzard/temp/*.log; 
do paste -s /home/trapper/.wine/drive_d/buzzard/addon.txt $i >> /home/trapper/.wine/drive_d/promail/queue/${i/.log}.101;
Code:
::: Move original log files off to archive :::
mv /home/trapper/.wine/drive_d/buzzard/temp/* /home/trapper/.wine/drive_f/archive/logs/s-series/
THE PROBLEM:
When I paste addon.txt to the log files it screws up the formatting. The files I am working with are DOS txt format. I end up with files in the queue that the MS-based mail server simply discards because they are not in the required format.

This is what the 101's need to look like:
Quote:
$$ admin@mydomain.com
T stats@mydomain.com

To: stats@mydomain.com
From: admin@mydomain.com
Subject: Daily Status Logs
Date: 08-29-2007
X-Mailer: 101template

DAILY STATUS LOG
<<< snipped >>>
This is what the 101's look like in gedit:
Quote:
HTML Code:
$$ [email]admin@mydomain.com[/email]
        T [email]stats@mydomain.com[/email]
	
        To: [email]stats@mydomain.com[/email]
        From: [email]admin@mydomain.com[/email]
        Subject: Daily Status Logs
        Date: 08-29-2007
        X-Mailer: 101template
	
        DAILY STATUS LOG
        <<< snipped >>>
This is what the 101's look like in windows notepad. This is what the mail server sees and rejects:
Quote:
$$ admin@mydomain.com|T stats@mydomain.com| To: stats@mydomain.com | From: admin@mydomain.com | Subject: Daily Status Logs| (etc. etc. etc.)

Last edited by Trapper; 08-29-2007 at 11:05 AM..
  #6 (permalink)  
Old 08-30-2007
Trapper Trapper is offline
Registered User
  
 

Join Date: Aug 2007
Posts: 5
I happened upon this code while googling. It has resolved my text format problem. It maintains ms-dos format when appending the files.
Code:
for i in *.log; do (echo '0r /home/trapper/.wine/drive_d/buzzard/addon.txt'; echo 'wq') | ed $i; done
That made me make some adjustments to my script. This is what I finally ended up with. It does what I originally wanted to do. As I said previously, I am sure there's a much more efficient and proper way to do all this and, eventually, when I become more knowledgeable in bash scripting, I'll probably change and streamline it. Time's a premium and that just has to wait.

Here's my final code:

Code:
# Move all logs, except today's log to a temp dir.

cd /home/trapper/.wine/drive_d/buzzard/logs/s-series
find *.log -daystart -mtime +0 -exec mv {} /home/trapper/.wine/drive_d/buzzard/temp \;

# Send a copy of the logs off to archive.

cd /home/trapper/.wine/drive_d/buzzard/temp
cp *.log /home/trapper/.wine/drive_f/archive/logs/s-series/

# Insert header text and retain current text formatting.

for i in *.log; do (echo '0r /home/trapper/.wine/drive_d/buzzard/addon.txt'; echo 'wq') | ed $i; done

# Bulk rename log files to extension needed by mail server.

ls *|sed 's/\(.*\)\.log/mv \1.log  \1.101/' |sh

# Move .101's to mail queue for delivery.

mv *.101 /home/trapper/.wine/drive_d/promail/queue
That's it.
Closed Thread

Bookmarks

Tags
linux, mtime, unix commands

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

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 On




All times are GMT -4. The time now is 03:28 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0