Hi Experts,
Below is my shell script and it will move the files older than 90 days to archive mount. Now my new requirement is , I need to move some of the directory files older than 365 days. How can I achieve this.
Simply I have
DIR1
DIR2
DIR3
DIR4
I need to exclude DIR 2 and DIR 2 directory older than 365 days files should be moved to another directory. Remaining directory will move the files older than 90 days as usual
Code:
#!/bin/ksh
#
#
# Backup Script to move older than 90 days files
DATE=`date +%Y%m%d`
#
#SRC Directories and Location
#-----------------------------------------------------
SRC_CDR_OUTBOUND=/omount/outbound
SRC_CDR_INBOUND=/omount/inbound
DEST_SRC_BILG=/omount/archive/
#-----------------------------------------------------
#
DATE=`date +%Y%m%d`
#Counting Number of files
#--------------------------------------------------------
BK_FILECOUNT_OUT=`find $SRC_CDR_OUTBOUND -type f -mtime +90 |wc -l`
BK_FILECOUNT_IN=`find $SRC_CDR_INBOUND -type f -mtime +90 |wc -l`
#--------------------------------------------------------
#
#Finding OUTBOUND files older than "90" days and Move the files to archive folder
#-----------------------------------------------------------------------------
find $SRC_CDR_OUTBOUND -type d -name '*' -exec mkdir -p $DEST_SRC_BILG{} \;
find $SRC_CDR_OUTBOUND -type f -name '*' -mtime +90 -exec mv {} $DEST_SRC_BILG{} \;
#-----------------------------------------------------------------------------
#
#Finding INBOUND files older than "90" days and Move the files to archive folder
#-----------------------------------------------------------------------------
find $SRC_CDR_INBOUND -type d -name '*' -exec mkdir -p $DEST_SRC_BILG{} \;
find $SRC_CDR_INBOUND -type f -name '*' -mtime +90 -exec mv {} $DEST_SRC_BILG{} \;
#-----------------------------------------------------------------------------
#Generating the log with date and file count for refernece
#-------------------------------------------------------------------------------------------
echo $BK_FILECOUNT_OUT "Outbound files moved to archive on"$DATE >>/omount/backup_logs.txt
echo $BK_FILECOUNT_IN "Inbound files moved to archive on"$DATE >>/omount/backup_logs.txt
#-------------------------------------------------------------------------------------------
Moderator's Comments:
Please use code tags next time for your code and data. Thanks
Firstly, you don't need -name '*' which says "only objects called anything" so leaving it out will ignore name matching and find objects that match the other criteria giving you the same result.
If you have a fixed set of input directories, then you could set your variables at the top to refer to them, e.g.:-
Hi Robin
Thank so much for your explanation. That works for me ..
But what i am planning is i am going to put one text file named as 365.txt to the directory which i want to exclude.so my shell script will find whether 365.txt file is there or not in each directory. If it exist then it will move the file older than 365 days..... if not it will move the files older than 90 days.
So in future if new request comes to me to exclude this directory I will put 365.txt file to that directory then it will move older than 365 days files
I know its possible but i tried many ways .. Unfortunately could not achieve it. Could you please put some light on this.
Thanks in advance....
Last edited by rbatte1; 08-06-2014 at 06:02 AM..
Reason: Spelling
That makes it a little more tricky, but as they say, "Anything is possible."
You can test if a file exists with this:-
Code:
if [ -f filename ]
then
echo "Found it!"
else
echo "File is not there."
fi
Does that help? You could set a variable to use in the find as the value assigned to -mtime. I'm still not clear on the process you would want it to take and how you would know where to find the file to make your decision. Can you write out a set of logical steps so we can plan it. If you put the phrases one on a line, then highlight them and press a list button (same icon choice as MS word) it will format it a bit better. To show a loop, just highlight the section and again press the list button of your choice.
The partial command in question: cut -f-4 -d\"\/\" |sort -u splits the values from the preceding command based on a forward slash /. The backslashes \ are needed because the quotes " and forward slash / are special to the shell and might get interpreted as meaning something rather than just being plain text.
The sort -u is a sort-unique, so having cut off the first 4 fields (null and three layers of directory split by /) there will be duplicates. This ensures that there is only one of each to be assigned to the variable in question.
I'm not sure if that makes it any clearer though. Maybe an example is better. Consider a directory structure like this:-
Please remember to use CODE tags. Simply wrap code and data input/output in CODE tags, like this:-
Quote:
[CODE]This is my code[/CODE]
to produce the following (fixed character width, space respected):-
Code:
This is my code
Not only does it make posts far easier to read, but CODE and ICODE sections respect multiple space and have fixed width characters, which is important for easily seeing input/output requirements.
Last edited by rbatte1; 08-06-2014 at 09:02 AM..
Reason: Correcting LIST formatting
Hi,
So i know we use cp -r as a basic to copy folders/files.
I would like this BUT i would like to show the output of the files being copied.
With the amazing knowledge i have i have gone as far as this:
1) find source/* -exec cp -r {} target/ \;
2) for ObjectToBeCopied in `find... (6 Replies)
Hi
Can i archive folder and folders in with the tar command
My files are located in subfolders
Eg: Folder1/Folder1_1/*.pdf
Folder1/Folder1_2/*.pdf
Folder1/Folder1_3/*.pdf
so i would like to tar all the files in Folder1_1 and Folder1_2 only not Folder1_3 that should be done next... (2 Replies)
I have a folder like this
ls input1
dir1 dir2 dir3 file1 file2 file3
dir1, dir2 and dir3 are sub-folders inside the folder input1
ls input2
dir1 dir2 dir3 file1 file2 file3
My dir1 in input1 folder has files f1, f2, f3 and f4.
My dir1 in input2 folder has file f4 and f5.
... (3 Replies)
Hi,
Below is the command to grep for a string under
grep -r "redeem" /home/tom
Need to make it case insensitive and exclude logs & tmp folders under /home/tom directory in my Search.
Need this in Linux. (1 Reply)
I am familiar with using tar and exclude/include files:
tar zcf backup.dirs.tgz --files-from=include.mydirs --exclude-from=exclude.mydirs --no-recursion
but was wondering if I could use find in the same way. I know that you can just specify the directories to exclude but my list is... (2 Replies)
Hello again,
A little while back I got help with creating a command to search all directories and sub directories for files from daystart of day x.
I'm wondering if there is a command that I've overlooked that may be able to search for / write folder names to an output file which ideally... (2 Replies)
I am trying to make a unix shell script that will make 99 folders 99 deep (counting the first level folders). So far i have made it make the first 99 folders and 99 more in all of the folders. The only problem is the only way i have found is copying and pasting part of the script over and over and... (18 Replies)
I have a directory with about 20 folders and many different types of files. I need to search for files and gzip in all the directories except for 1 directory.
How do you exclude a directory? (2 Replies)
I am in a fix.......
I have to write a backup script to backup say Folder A.
Folder A contains n folders 1,2 ,3 .....n.
my script should copy A without folder 2 & 3.
Is there anyway I can do it without writing individual copy commands????
Please help.... (5 Replies)
I am in a fix.......
I have to write a backup script to backup say Folder A.
Folder A contains n folders 1,2 ,3 .....n.
my script should copy A without folder 2 & 3.
Is there anyway I can do it without writing individual copy commands????
Please help.... (1 Reply)