Archive Files over certain modification time


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Archive Files over certain modification time
# 1  
Old 09-07-2009
Archive Files over certain modification time

Environment is cygwin on Windows Server 2003 as I could not think how I would achieve this using Windows tools.

What I want ot achieve is the following.

I have a Directory D:\Data which contains further subfolders and files. I need to move "files" older than 6 months modification time to E:\Archive\ using the same folder structure.

So using an example of one of the directories:

/cygdrive/d/
/data/
`-- Accounts Dept/
|-- A/
| `--A Prominent Profile Promotions Pty Ltd/
| `anotherfile.doc
`olderthan6mths.txt
`newthan6mths.txt

As you can see there are files under various sub directories. So on the destination I need a way to create the same folder structure for the files older that 6 months to be placed in the same structure like so (assumes the documents anotherfile.doc and olderthan6mths.txt are older that 6 months):

/cygdrive/e/
/Archive/
`-- Accounts Dept/
|-- A/
| `--A Prominent Profile Promotions Pty Ltd/
| `anotherfile.doc
`olderthan6mths.txt

So far I have been able to do this to make the directories but this makes all the directories:

Code:
find /cygdrive/d/data/ -type d | xargs -i mkdir -p {} /cygdrive/e/Archive/

And to locate the files older than 6 months, but this would obviusly just move all files into the root of /cygdrive/e/Archive/.

Code:
find /cygdrive/d/data/ -mtime +182 -type f | xargs -i mv {} /cygdrive/e/Archive/

So how would I go about creating the directory structure in /cygdrive/e/Archive/ and moving files older than 6 months from /cygdrive/d/data/ whilst preserving there position in the directory structure destination starting at /cygdrive/e/Archive/ from /cygdrive/d/data/?

I have looked and googled by frankly my command line fu is not that good.... yet Smilie
# 2  
Old 09-07-2009
Quote:
Originally Posted by jelloir
So how would I go about creating the directory structure in /cygdrive/e/Archive/ and moving files older than 6 months from /cygdrive/d/data/ whilst preserving there position in the directory structure destination starting at /cygdrive/e/Archive/ from /cygdrive/d/data/?

I have looked and googled by frankly my command line fu is not that good.... yet Smilie

Not sure but.....

I don't believe there's any way to do matching/substitution on {} so I believe what you really need to do is have xargs invoke some script that you write, rather than calling mv, and have your script do the actual mv. That way, you can make substitutions in the path for where you want to move the file to. And, for the directory structure, I would use "mkdir -p" to create the hierarchy. In fact, you could just call it before each move. You only have to give it the path to the final directory and, if necessary, it will create all intermediate sub-directories. If it already exists, then it does nothing.
# 3  
Old 09-07-2009
Draft (untested):

Code:
#! /bin/bash

find /cygdrive/d/data/ -mtime +182 -type f >> files.lst

cat files.lst | \
while read SOURCE
do
  TARGET=$( echo $SOURCE | sed 's/d\/data/e\/Archive/' - )
  FOLDER=$( basedir $SOURCE )
  if [ ! -d $FOLDER ]
  then
    mkdir -p $FOLDER
  fi
  mv $SOURCE $TARGET
done

exit 0

# 4  
Old 09-07-2009
Quote:
Originally Posted by dr.house
Draft (untested):

Code:
#! /bin/bash

find /cygdrive/d/data/ -mtime +182 -type f >> files.lst

cat files.lst | \
while read SOURCE
do
  TARGET=$( echo $SOURCE | sed 's/d\/data/e\/Archive/' - )
  FOLDER=$( basedir $SOURCE )
  if [ ! -d $FOLDER ]
  then
    mkdir -p $FOLDER
  fi
  mv $SOURCE $TARGET
done

exit 0


dr.house, you Sir are a legend!

I had to make some slight changes to " FOLDER=$( basedir $SOURCE )" to fix it a little but this is what will work. I haven't tested yet with Spaces in the Directory or filenames yet (it is Windows After all) but at least I have a framework to go from now, Awesome!! Thanks to you both for your help so far, i'm very happy with my first post on the forums Smilie

Code:
#! /bin/bash

find /cygdrive/d/data/ -mtime +182 -type f >> files.lst

cat files.lst | \
while read SOURCE
do
  TARGET=$( echo $SOURCE | sed 's/d\/data/e\/Archive/' - )
  FOLDER=$( dirname $TARGET )
  if [ ! -d $FOLDER ]
  then
    mkdir -p $FOLDER
  fi
  mv $SOURCE $TARGET
done

exit 0

# 5  
Old 09-07-2009
Quote:
Originally Posted by jelloir
I haven't tested yet with Spaces in the Directory or filenames yet [...]
To make this work as well, you may want to enclose the relevant values and variables in single and double quotes, respectively Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Getting files through find command and listing file modification time upto seconds

I have to list the files of particular directory using file filter like find -name abc* something and if multiple file exist I also want time of each file up to seconds. Currently we are getting time up to minutes in AIX is there any way I can get file last modification time up to seconds. (4 Replies)
Discussion started by: Nitesh sahu
4 Replies

2. Shell Programming and Scripting

How to change modification time of file?

Explain it with proper e.g (4 Replies)
Discussion started by: sidpatil
4 Replies

3. Shell Programming and Scripting

Ls ignoring files from their modification time

Hi everyone, I'd like to know if is there a way to list files but ignoring some according to their modification time (or creation, access time, etc.) with the command 'ls' alone. I know the option -I exist, but it seems to only looking in the file name.. Thank you in advance for the... (8 Replies)
Discussion started by: Keyhaku
8 Replies

4. Shell Programming and Scripting

How to list the files based on the modification time using the find command?

Hi All, I need to list the files based modification time of the files from a directory, I cannot use "ls -t" as there are lot of files, which "ls" command cannot handle. New files will land there daily. So iam looking for an alternative through "find"command. All suggestions are welcomed. ... (6 Replies)
Discussion started by: Kesavan
6 Replies

5. UNIX for Dummies Questions & Answers

Need Modification Time of a file

Hi all, I need the modification time of a file on a particular day say 3 days before. I just don't want the last modification time. I need all the modification times on a particualar day. Is there anyway to do it? Kindly help. Could anyone tell me where the modification time is stored?... (1 Reply)
Discussion started by: vidhyab
1 Replies

6. Shell Programming and Scripting

File modification time comparison

Hi All, I have two files (given below) each exists under different paths. I want to compare the modification time stamp of file1.txt is lessthan the modification time of file2.txt. month1=`ls -l file1.txt | awk '{ print $6}'` date1=`ls -file1.txt | awk '{ print $7}'` time1=`ls... (1 Reply)
Discussion started by: Arunprasad
1 Replies

7. Shell Programming and Scripting

time modification in script

Hi All.. I have a file with a number of non-unique entries as below: 1243 01:42:29,567 --> 01:42:32,108 blah blah .... blah blah .. 1244 01:42:32,709 --> 01:42:34,921 blah blah .... 1245 01:42:35,214 --> 01:42:36,533 blah blah .... blah blah .. blah blah .... blah blah .. (4 Replies)
Discussion started by: UniRock
4 Replies

8. Shell Programming and Scripting

ls -e to find out File modification time in secs

Hi All, I would like to know the file modification time till seconds in Unix. So I tried ls -e and it worked fine. This Solaris 5.10 -rw-rw-r-- 1 test admin 22 Sep 12 11:01:37 2008 test_message But I am not able to run the same command in SOlaris 5.6 and also in AIX/HP Is there... (3 Replies)
Discussion started by: rahulkav
3 Replies

9. Shell Programming and Scripting

Displaying the Last Modification Time of a specific file

How can I get and display the last modification time of a file? in scripting or specifically using Batch file I want this info for me to determine whether an image has been edited or not by using the last modification time and compare it to our stored date of modification. can somebody help... (5 Replies)
Discussion started by: jaque18
5 Replies

10. UNIX for Dummies Questions & Answers

File modification time

Does anyone know how to display the time with seconds of when a file was last modified. I can get hour & minutes but would also like seconds. --Running AIX (1 Reply)
Discussion started by: edog
1 Replies
Login or Register to Ask a Question