Compress folders every 6 months
I generate a folder everyday consisting of different reports. I would like to compress these folders(named 0101207,01022017,etc etc) every six months. So folders named 01012017 to 06312017 would be compressed to a folder named 'Jan2017_Jun2017'. Then of course folders starting on 07012017 to 12312017 would be compressed in a folder named 'July2017_Dec2017. These folders are on a Windows shared folder. It would be ok for this automated tasks to be installed and ran from my laptop, but if it can be ran via CRON job that would be ok too, whichever is easier. Is this possible? Any help is highly appreciated
|
Code:
sudo crontab -e |
I'm not allowed to use this program, and it takes too long and I have to go through too much to get permission to run certain commands. I guess it would be better for it to run from my laptop.
|
Is it Linux on your laptop because that's how to setup a CRON job (IMHO the easy way...)
|
No, unfortunately it's Windoze(YUCK).
|
@trickydba, unfortunately this is not a Windows forum.
Is Linux involved here at any point? You cited cron and then you said you can't use it due to Windows. If you wish automated tools for Windows, then please seek an alternate forum on LQ such as the Non-Nix-General forum, or give Stack Overflow a try. As far as Linux goes, people can offer some suggestions; however you need to cite your topology of systems, tell us where Linux is being used, or is capable of being installed, or allowed to be installed, and then people can offer some solutions here. |
Well I just recently found out since creating this thread that I cannot create a cron job. I apologize. I guess at this point I would like to have a script that I can execute MANUALLY that can resolve my issue
|
Isn't this a political issue rather than a technical one?
If you're employed as a DBA and expected to back up then you need cron -- if your employer says otherwise get it in writing they don't want a backup and forget about it (whilst looking for a new job in case the imbeciles take the company down). |
Well the work I do is dba plus more but I just chose to have it a part of my user name just because it was the 1st thing that came to my mind
|
Quote:
|
I understand.........still at this time I humbly ask for assistance with my issue. Is it possible in a script I can run every 6 months manually? I figure I can get the script 1st then request for the access to create a cron task. Either way, I would still need help
|
Quote:
the script would probably call for things like tar: Code:
tar -cvjf 2017.5.tar.bz2 /path/to/files |
I was thinking this might work, from an older thread:
Code:
Code:
#!/bin/bash If I choose number 1, it will run my code(if it's right) and create the compressed filename 'JanJun2017', appending the year If I choose number 2, it will run my code and create a compressed file 'JulyDecember2017' appending the year showing a progress bar, then when done it shows "Compression successful!" and exits. I know Whiptail has a 'gauge' function that displays a progress bar |
What you just wrote is what I was going to suggest. To use find and tar.
I do not feel you need to use a script. |
Notes.
I know this isn't the question asked but if I wanted to store data on a windows machine then I'd use windows folder compression tools to save data and make the information seamlessly available to all resources. However many linux programs might be ran from limited user permissions. Tar and many other programs could be used and piped to some compression and some have switches that make renaming rather easy. Kind of the issue is how much permissions do you have in linux. Simple tar may not be allowed. You could even have some higher permissions that allow distro based programs to be run. |
Well I want to do exactly as I stated above. I ran it as it is and I like it! It reminds me of some stored procs I created in stinky windows! For right now I think this is one of those tasks that I prefer to do manually
|
This is what I came up with so far. I have not ran it yet but I hoped that someone would see this ode and correct any errors:
Code:
#!/bin/bash |
At first glance OPTION is not an array and you might want to specify the full path to your search directory and tar.gz file.
I have not played with whiptail much so can not help with its gauge box. |
@michaelk............How do I do this? I created this from other sources and I only have limited knowledge of java which led me to what I have now. I have another script much simpler that I figured I should start out with(the 1st code I provided is much prettier 8.) )
I created several blank folders, ranging 01012017 through 12312017. There will be other folders to cover all days in a year but I only created this for a starting point. This is the SECOND OPTION of code I'm working with that is much simpler. The folders are in the same directory: Code:
#! /bin/bash Compressing folders Jan to Jun tar: Cowardly refusing to create an empty archive I'm lost. Any help is highly appreciated BUT I love that 1st code, with the pretty menu n colors n all! 8.)) |
I can recommend [CODE][QUOTE][/QUOTE][/CODE] [B]tags![/B] :D
Code:
eg |
@jamison200003.........what is that? Where do I plug it in?
|
Quote:
|
|
Excellent point jamison20000e.
@trickydba, what they are recommending is that you either use the advanced editor and properly frame code using [code][/code] tags, there are tools available in the advanced edit mode. Further, you can also manually type these tags in, and the ones for use in LQ are located here, and discussed in the FAQ here. Edit: Just noticed their added reply also arrived about the same time. Yes, same link. |
All I implied is that whiptail does not return an array so instead of ${OPTION[x]} you would use $OPTION.
The case syntax is not correct in your second script. You need to use ;; to separate each items code. There are many ways to create menus with or without a window. |
I apologize all....
@michaelk............How do I do this? I created this from other sources and I only have limited knowledge of java which led me to what I have now. I have another script much simpler that I figured I should start out with(the 1st code I provided is much prettier 8.) ) I created several blank folders, ranging 01012017 through 12312017. There will be other folders to cover all days in a year but I only created this for a starting point. This is the SECOND OPTION of code I'm working with that is much simpler. The folders are in the same directory: Code:
#! /bin/bash Compressing folders Jan to Jun tar: Cowardly refusing to create an empty archive I'm lost. Any help is highly appreciated BUT I love that 1st code, with the pretty menu n colors n all! 8.)) |
Not sure if this is the exact problem; however June has only 30 days.
Hence 0631 is an invalid search term. You probably won't get it, but "use your knuckles". January, left, upper index knuckle = 31 days. February, dip between index and second finger = 28/29 days. March, next upper digit knuckle = 31 days. ... July is the upper digit of your pinky, 31 days Go back to the index finger, August is 31 days. Finish the year. Or just remember that all months alternate between 31 and 30 or the special case of February. And then remember that July/August are both 31. |
This is my final code:
Code:
#!/bin/bash Code:
|
Break that down. Enter the find command manually and verify that it finds the files. Combine that with your tar command. Use "set -xv" in the command line to see what the error is, also consider using that in the script. Perhaps the find command is not working or finding the correct files and thus it outputs nothing. After all, look what the error is saying.
|
@rtmistler......I couldn't find the issue after doing what you suggested. If you have folders created like '01012017' that go all the way to '12312017' and you wanted to tar them to one file named as such 'JanJun.tar' and 'JulDec.tar' how can this be done?
I researched doing this with files but couldn't find anything for compressing folders. |
Quote:
My best suggestion is to always stage that in a command line first to validate that you get what you desire. Don't just jump in and assume the .zip extension works, try it out and also transfer that file to a destination system where you wish to re-read it. Or whichever extension you end up choosing. Note that there used to be a -z flag for tar, and it probably still accepts it but ignores it silently. It might be useful for you to check the version of tar you have, check the manual page for the tar you have and verify that it will work in the manners I'm describing. |
UPDATE...Ok I got it partially working. Here is the code again:
Code:
#! /bin/bash Code:
Compressing folders Jan to Jun 01062017 01042017 01032017 01012017 01022017 01052017 which of course nothing should have been compressed. Any help is highly appreciated! |
-mtime 182 finds files modified exactly 182 days ago. Since there is not an option +mtime your results are not valid.
-mtime n (n*24 hours) +n for greater than n, -n for less than n, n for exactly n. If you want to go by mtime you will need to specify a range but you need to calculate the days based upon the current date. If today was 12/31 then something like the following would find files between Jan 1 - Jun 30 (I did not calculate exact days...) -mtime +182 –mtime -365 You can find files based upon the file name using wildcard expansion. Although it isn't pretty and others might have a better idea. find . -maxdepth 1 -name "0[0-6]*" To specify a year find . -maxdepth 1 -name "0[0-6]??YYYY" Would find all files/directories in the current working directory from Jan - Jun assuming they were named MMDDYYYY. For July-August find . -maxdepth 1 -name "0[7-9]*" For Sept-Dec find . -maxdepth 1 -name "1[0-2]*" July-Dec would need 3 commands i.e two to create append the tar file and a separate command to compress. I know that some of these commands can be confusing and in most cases you can find decent help and examples. |
Too confusing to me. I came up with a better idea. How can I compress folders( named like 01012017,02012017,etc ) based only on the first 2 digits (the month)?
Like for instance to only compress folders where the range is from 01****** to 06****** |
Would this work?
Code:
echo "Compressing folders Jan to Jun "; find . "01*" ! "06*" | xargs tar -zcvf /dir1/dir2/dir3/TESTING/JanJun${YEAR}.tar.gz;; |
Quote:
|
This is the code I used:
Code:
echo "Compressing folders Jan to Jun "; find . "01*" ! "06*" | xargs tar -zcvf /dir/dir/dir/TESTING/JanJun${YEAR}.tar.gz;; Code:
Compressing folders Jan to Jun |
There's a syntax error in your find command. I know there are shortcuts; however I always use:
Code:
find . -name "01*" This would either be six find commands, one for each month, or using a -since or date qualifier to capture the files since your last backup. Once again, I know there are highly particular requirements. I'm remembering that this is to back up information you've generated on the behalf of a company you work for in some manner. Personally I'd reorganize files once they'd been backed up. Make my backup and then move the backed up files to an "old" sub-directory or something similar. If things are so restricted that you cannot move files, such as you're not allowed to move files, and this company is so very highly specific about everything, then I question whether or not you should be keeping any copies. I've worked as a contractor for highly restrictive employers, such as government contractors, and you're not supposed to take any IP out of their shop at all. Not allowed. Then again, the security restrictions were sufficient such that if I tried to take out a drive of any type, it would be a problem, let alone bring in anything capable of storage. If this is a commercial company, or something more serious such as aviation or power grid, things like that where once again they have protected systems. Same thing. I would not be keeping any personal records. This "sounds" as if you're generating status reports and you wish to keep a copy. So ... keep a copy on another system, this laptop you mention, and back that up however best works for you. |
As stated you have to specify each month which can be done using or. Not tested but should work.
Code:
find . -type d \( -name "01*" -o -name "02*" -o -name "03*" -o -name "04*" -o -name "05*" -o -name "06*"\) |
I tried this code and nothing returns but I do not want to use OR, I want to pick the folders from Jan(01*) to Jun(06*):
Code:
echo "Compressing folders Jan to Jun "; find . -type d \( -name "01*" -o -name "02*" -o -name "03*" -o -name "04*" -o -name "05*" -o -name "06*"\) | xargs tar -zcvf /dir/dir/dir/TESTING/JanJun${YEAR}.tar.gz;; Code:
echo "Compressing folders Jan to Jun "; find . -type d "01*" ! "06*" | xargs tar -zcvf /dir/dir/dir/TESTING/JanJun${YEAR}.tar.gz;; Quote:
|
In my previously post there was not a space between the last " and \ i.e. "06*"\) vs "06*" \) which caused a syntax error.
Code:
$ ls Code:
find . -type d \( -name "01*" -o -name "02*" -o -name "03*" -o -name "04*" -o -name "05*" -o -name "06*" \) Code:
find . -type d \( -name "01*" -o -name "02*" -o -name "03*" -o -name "04*" -o -name "05*" -o -name "06*" \) | xargs tar -zcvf testme.tgz Code:
tar -tf testme.tgz |
After placing .xlsx files in the months of '02', '01' and '06' it appears that the code below works:
Code:
find . -type d \( -name "01*" -o -name "02*" -o -name "03*" -o -name "04*" -o -name "05*" -o -name "06*" \) |
I just think everything is possible
|
All times are GMT -5. The time now is 05:03 AM. |