Moving files from one directory to another based on 2 date variables


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Moving files from one directory to another based on 2 date variables
# 1  
Old 06-20-2012
Moving files from one directory to another based on 2 date variables

Hi All,

I am currently coding for a requirement(LINUX OS) where I am supposed to move a file (Lets Call it Employee.txt) from Directory A to Directory B based on 2 date fields as below,

Code:
Date_Current = 20120620
Date_Previous = 20120610

Source Directory : /iis_data/source
Target Directory : /iis_data/destination

Files available in Directory:
Code:
20120609_Employee.txt
20120612_Employee.txt
20120615_Employee.txt
20120616_Employee.txt
20120617_Employee.txt
20120620_Employee.txt

I need to move all these files (EXCEPT the 20120609_Employee.txt) to destination Folder.
Also, I need to write the above dates from the files to a dummy file.

Can you pls help me figure out how to do it ? Any help is appreciated.

Thanks Much
Freddie

Last edited by Scrutinizer; 06-21-2012 at 02:49 PM.. Reason: code tags
# 2  
Old 06-20-2012
The nice thing about YYYYMMDD dates is they sort and compare alphabetically.



Code:
#!/bin/sh

 Date_Current=20120620
Date_Previous=20120610

IFS="_"
for FILE in *.txt
do
        set -- $FILE

        if [ "$1" ">" "$Date_Previous" ] && [ "$1" "<" "$Date_Current" ] ||
                [ "$1" = "$Date_Previous" ] || [ "$1" = "$Date_Current" ]
        then
                echo mv "$FILE"
        fi
done

# 3  
Old 06-20-2012
Thanks Corona for your reply.
This is what I am trying in my sample script,

Code:
 
Date_Current=20120620
Date_Previous=20120610
IFS="_"
for EMPLOYEE in /iis_data/source/*.txt
do
set -- $FILE
if [ "$1" ">" "$Date_Previous" ] && [ "$1" "<" "$Date_Current" ] ||
[ "$1" = "$Date_Previous" ] || [ "$1" = "$Date_Current" ]
then
echo mv "$FILE /iis_data/destination/"
fi
done

Can you pls let me know what I am doing wrong here.
Error Message:
Code:
 
+ for EMPLOYEE in '/iis_data/source/*.txt'
+ set --
+ '[' '' '>' 20120610 ']'
+ '[' '' = 20120610 ']'
+ '[' '' = 20120620 ']'


Last edited by Scrutinizer; 06-21-2012 at 02:47 PM.. Reason: code tags instead of quote tags
# 4  
Old 06-20-2012
That's not an error message. Smilie

Code:
for EMPLOYEE in '/iis_data/source/*.txt'

Did you put this in quotes in your original? It won't work if its in quotes.
# 5  
Old 06-20-2012
Hi Corona,

Thanks for your reply. This is what I am seeing in the error log,

Code:
Date_Current=20120620
+ Date_Previous=20120610
+ IFS=_
/iis_data/source/20120609_EMPLOYEE.txt /iis_data/source/20120618_EMPLOYEE.txt /iis_data/source/20120619_EMPLOYEE.txt /iis_data/source/20120622_EMPLOYEE.txt /iis_data/source/CallParam.txt /iis_data/source/convertfuntionn.txt /iis_data/source/convert.txt /iis_data/source/Copybook.txt /iis_data/source/CPMGBUSDynamicDateFile1.txt /iis_data/source/CPMG_CDPH_Approach.txt /iis_data/source/CPMGDynamicDateFile_0410.txt

Looks like it read all the files that end with *.txt. Also, doesnt seem to move the files to the destination directory.
I suspect the below code part is causing the issue,

Code:
for EMPLOYEE in `/iis_data/source/*.txt`
do
set -- $FILE
if [ "$1" ">" "$Date_Previous" ] && [ "$1" "<" "$Date_Current" ] ||
[ "$1" = "$Date_Previous" ] || [ "$1" = "$Date_Current" ]
then
echo mv "$FILE /iis_data/destination/"
fi
done


Last edited by Scrutinizer; 06-21-2012 at 02:47 PM.. Reason: code tags + code tags instead of quote tags
# 6  
Old 06-20-2012
Assuming that there is only one file per date, that the only dates in filenames in that directory occur in files of interest, and that there aren't other files whose names may sort within the date range, the following may be of use:

ls | sed -n "/$Date_Previous/,/$Date_Current/p; /$Date_Current/q" | xargs -I_ echo mv _ /iis_data/destination/

If the output is acceptable, remove the word "echo" to actually move files.

Regards,
Alister
This User Gave Thanks to alister For This Post:
# 7  
Old 06-21-2012
You did it again:
Code:
for EMPLOYEE in `/iis_data/source/*.txt`

That is in backticks and should not be.

In the code I actually posted, it was in no brackets, quotes, or ticks whatsoever. It is not supposed to be in any whatsoever. It will not work if you put it in any whatsoever.

Try the code I gave you without editing things that look funny. It is working code.
This User Gave Thanks to Corona688 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Searching for a files based on current date directory

Hi All, I've been trying to do some recursive searching but not been very successful. Can someone please help. Scenario: I have directory structure /dir1/dir2/dir3/ 2019/ 11/ 17 18 19 20 so what I want to do is run a script and as its 2019/11/18/ today it would go and only search... (3 Replies)
Discussion started by: israr75
3 Replies

2. UNIX for Dummies Questions & Answers

Unable to find files, those can be present anywhere in the directory tree,based on its creation date

Hi I am unable to find files, those are present anywhere in the same directory tree, based on the creation date. I need to find the files with their path, as I need to create them in another location and move them. I need some help with a script that may do the job. Please help (2 Replies)
Discussion started by: sam192837465
2 Replies

3. UNIX for Dummies Questions & Answers

Script moving files based on date

Hi, I need a script that moves files based on date to a folder. The folder should be created based on file date. Example is : Date file name ----- -------- Oct 08 07:39 10112012_073952.xls Oct 09 07:39 10112012_073952.xls Oct 10 07:39 ... (6 Replies)
Discussion started by: rockingvj
6 Replies

4. Shell Programming and Scripting

Move files from one directory to another based on creation/modification date

Hi All, Really stuck up with a requirement where I need to move a file (Lets say date_Employee.txt--the date will have different date values like 20120612/20120613 etc) from one directory to another based on creation/modification dates. While visiting couple of posts, i could see we can... (3 Replies)
Discussion started by: dsfreddie
3 Replies

5. UNIX for Dummies Questions & Answers

Moving Directories Based on Modified date

Hi, How can I move directories (and all sub directories/files) from one directory to another based on the modified date of the directory? Currently the existing structure looks like this: /public_html/media/videos/tmb/34947/image1.jpg /public_html/media/videos/tmb/34947/image2.jpg ... (0 Replies)
Discussion started by: lbargers
0 Replies

6. Shell Programming and Scripting

Need script to select multiple files from archive directory based on the date range

hi all, here is the description to my problem. input parameters: $date1 & $date2 based on the range i need to select the archived files from the archived directory and moved them in to working directory. can u please help me in writing the code to select the multiple files based on the... (3 Replies)
Discussion started by: bbc17484
3 Replies

7. Shell Programming and Scripting

Creating date directory and moving files into that directory

I have list of files named file_username_051208_025233.log. Here 051208 is the date and 025233 is the time.I have to run thousands of files daily.I want to put all the files depending on the date of running into a date directory.Suppose if we run files today they should put into 05:Dec:08... (3 Replies)
Discussion started by: ravi030
3 Replies

8. Shell Programming and Scripting

Sorting Files by date and moving files in date order

I need to build a k shell script that will sort files in a directory where files appear like this "XXXX_2008021213.DAT. I need to sort by date in the filename and then move files by individual date to a working folder. concatenate the files in the working folder then start a process once... (2 Replies)
Discussion started by: rebel64
2 Replies

9. Shell Programming and Scripting

Moving file to directory based on condition.

Can any one help me to correct following script. I have 2 directories DropZone and ProcessZone. File pattern is *VEHDESCSUM*. Finding the 'no of files' in DropZone directory using ls *VEHDESCSUM* |wc -l If DropZone has more than one file or 0 files then exit 1 If DropZone has one file then... (2 Replies)
Discussion started by: ramanagh
2 Replies

10. UNIX for Dummies Questions & Answers

Moving files based on creation date

Howdy, I'm trying to figure out how to move multiple files based on their creation date. If anyone can enlighten me it would be most appreciated!! Thanks! :D (1 Reply)
Discussion started by: dgoyea
1 Replies
Login or Register to Ask a Question