Archive script spot a mistake?


 
Thread Tools Search this Thread
Top Forums Programming Archive script spot a mistake?
# 1  
Old 03-07-2017
Archive script spot a mistake?

Code:
#!/bin/bash

source=/to_be_archived
dest=/archived

    echo "is this archive for an audio tar press (t) or an audio directory press (d)"
    read option

    case $option in

        d)
            cd "$source"

            echo "please specify full path to directory you want to be made into a tar"
            read -e dir

#            echo "please enter ID number ie ID1234"
#            read id

#            echo "please specify where you want the tar file to be stored"
#                       read -e dest

            cd "$dir"

            base=$(basename "$dir")

                echo -e "create "$base" into "$base".tar\n"
                                echo -e "move "$base".tar to "$dest"\n"
#                               echo -e "remove "$base".tar from "$dir"\n"
                echo -e "remove "$base" from "$dir"\n"

                                        echo "is this information correct, press (y) or press (n)"
                                        read correct

                                        case $correct in

                                                y)
                            echo "the script will now continue";;

                                                n)
                            echo "please re-run the script inputting correct details"
                                                        exit;;

                                                *)
                            echo "invalid selection, please re-run the script"
                                                        exit;;

                                        esac                

            date >> /inventories/"$base".csv
            echo "" >> /inventories/"$base".csv
#            echo -e ""$id"\n" >> /inventories/"$base".csv
            echo -e ""$dir"\n" >> /inventories/"$base".csv
            echo -e "how many files = `find . -type f | wc -l`\n" >> /inventories/"$base".csv
            echo -e "size of directory = `du -sh`\n" >> /inventories/"$base".csv
            ls -R >> /inventories/"$base".csv
            
            cd ..

            if ! tar -cf "$base".tar "$dir" ; then
                echo "something went wrong with the tar, please do manually"
                exit
            fi

            if ! mv "$base".tar "$dest" ; then
                echo "something went wrong with the move, please do manually"
                exit
            fi

#            if ! rm -f "$base".tar ; then
#                echo "something went wrong with the rm -f command, please do manually"
#                exit
#            fi

            if ! rm -rf "$dir" ; then
                echo "something went wrong with the rm -rf command, please do manually"
                exit
            fi;;

        *)

            echo "invalid selection, please re-run the script"
            exit;;

    esac

can anyone spot the mistake as when i run the script it cant make the tar

many thanks,

rob
# 2  
Old 03-07-2017
Hi,

Could you possibly post the exact error you get from the tar command itself when the script is run ? You will of course get your own error message as defined in the script, but it would be very useful to know why tar itself believes it is failing.
# 3  
Old 03-07-2017
ok thanks i will next time i run a test on it as when i create a directory and couple of sub directorys in the root directory and then some text files it works fine, no hicups

but when i do it on some more major directorys that hold couple of GB of data thats when it messes up
# 4  
Old 03-09-2017
this is the error i get -

Code:
is this archive for an audio tar press (t) or an audio directory press (d)
d
please specify full path to directory you want to be made into a tar
robert_test/after_louise_1606/
create after_louise_1606 into after_louise_1606.tar

move after_louise_1606.tar to /vol/cha-archive/audio

remove after_louise_1606 from robert_test/after_louise_1606/

is this information correct, press (y) or press (n)
y
the script will now continue
tar: robert_test/after_louise_1606: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
something went wrong with the tar, please do manually

# 5  
Old 03-09-2017
Hi,

This error indicates that the content you asked tar to add to an archive could not be found, and so it could not proceed. So either the directory robert_test/after_louise_1606 did not exist at the time the tar command ran, or it was located underneath a different part of the filesystem than the current working directory of tar at that time.

One thing you could try here, and which is generally good practice, is to use fully-qualified paths rather than relative paths in a script. So (for example) a path like /home/robert/robert_test/after_louise_1606 (I'm just making up the first part of that path obviously, since I don't know where on your filesystem the directory really is). Fully-qualified paths to binaries and files in scripts are almost always a good idea, and can eliminate an entire class of errors entirely.

So that'd be my take on this: either the directory you tried to add to an archive didn't exist at that exact moment in time, or you weren't actually running the tar command in the current working directory you expected to be in.
# 6  
Old 03-09-2017
Does robert_test/after_louise_1606 exist in your current working directory (I guess: not).
I've got some difficulties to follow your flow; i.e. where you're located after cd "$source" and cd "$dir"; That may be the reason tar "$dir" fails...
# 7  
Old 03-09-2017
what a idiot i am, changed it and it now works like a charm -

Code:
#!/bin/bash

cd /vol/cha-work/_ARCHIVE/to_be_archived/audio
dest=/vol/cha-archive/audio

	echo "is this archive for an audio tar press (t) or an audio directory press (d)"
	read option

	case $option in

		t)

			echo "please specify full path to tar file"
			read -e tar

			base=$(basename "$tar")

#			echo "please enter ID number ie ID1234"
#			read id

#			echo "please specify where you want the tar file to be stored"
#			read -e dest

#				echo -e "rename "$base" to "$id"_"$base"\n"
	                       	echo -e "move "$base" to "$dest"\n"
                        	echo -e ""$base" will be removed from "$tar"\n"

					echo "is this information correct, press (y) or press (n)"
					read correct
	
					case $correct in

						y)
							echo "the script will now continue";;

						n)
							echo "please re-run the script inputting correct details"
							exit;;

						*)
							echo "invalid selection, please re-run the script"
							exit;;

					esac

			if ! mv "$tar" "$base" ; then
				echo "something went wrong with the move command, please do manually"
				exit
			fi

			if ! mv "$base" "$dest" ; then
				echo "something went wrong with the move command, please do manually"
				exit
			fi

#			if ! rm -f "$base" ; then
#				echo "something went wrong with the rm -f command, please do manually"
#				exit
#			fi
			;;

		d)

			echo "please specify full path to directory you want to be made into a tar"
			read -e dir

#			echo "please enter ID number ie ID1234"
#			read id

#			echo "please specify where you want the tar file to be stored"
#                       read -e dest

			cd "$dir"

			base=$(basename "$dir")

				echo -e "create "$base" into "$base".tar\n"
                                echo -e "move "$base".tar to "$dest"\n"
#                               echo -e "remove "$base".tar from "$dir"\n"
				echo -e "remove "$base" from "$dir"\n"

                                        echo "is this information correct, press (y) or press (n)"
                                        read correct

                                        case $correct in

                                                y)
							echo "the script will now continue";;

                                                n)
							echo "please re-run the script inputting correct details"
                                                        exit;;

                                                *)
							echo "invalid selection, please re-run the script"
                                                    	exit;;

                                        esac				

			date >> /vol/cha-work/_ARCHIVE/inventories/"$base".csv
			echo "" >> /vol/cha-work/_ARCHIVE/inventories/"$base".csv
#			echo -e ""$id"\n" >> /vol/cha-work/_ARCHIVE/inventories/"$base".csv
			echo -e ""$dir"\n" >> /vol/cha-work/_ARCHIVE/inventories/"$base".csv
			echo -e "how many files = `find . -type f | wc -l`\n" >> /vol/cha-work/_ARCHIVE/inventories/"$base".csv
			echo -e "size of directory = `du -sh`\n" >> /vol/cha-work/_ARCHIVE/inventories/"$base".csv
			ls -R >> /vol/cha-work/_ARCHIVE/inventories/"$base".csv
			
			cd ..

			if ! tar -cf "$base".tar "$base" ; then
				echo "something went wrong with the tar, please do manually"
				exit
			fi

			if ! mv "$base".tar "$dest" ; then
				echo "something went wrong with the move, please do manually"
				exit
			fi

#			if ! rm -f "$base".tar ; then
#				echo "something went wrong with the rm -f command, please do manually"
#				exit
#			fi

			if ! rm -rf "$dir" ; then
				echo "something went wrong with the rm -rf command, please do manually"
				exit
			fi;;

		*)

			echo "invalid selection, please re-run the script"
			exit;;

	esac

basically i changed it from this -

Code:
if ! tar -cf "$base".tar "$dir" ; then

to this -

Code:
if ! tar -cf "$base".tar "$base" ; then

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script to archive logs and sftp to another archive server

Requirement: Under fuse application we have placeholders called containers; Every container has their logs under: <container1>/data/log/fuse.log <container1>/data/log/fuse.log.1 <container1>/data/log/fuse.log.XX <container2>/data/log/fuse.log... (6 Replies)
Discussion started by: Arjun Goswami
6 Replies

2. Shell Programming and Scripting

Shell script to call Oracle archive backup script when file system reaches threshold value

Hello All, I need immediate help in creating shell script to call archivebkup.ksh script when archive file system capacity reaches threshold value or 60% Need to identify the unique file system that reaches threshold value. ex: capacity ... (4 Replies)
Discussion started by: sasikanthdba
4 Replies

3. UNIX for Dummies Questions & Answers

Can anyone help me to spot my mistake?

Hi there can anyone help me to spot my mistake and please explain why it appears My code : #!/usr/bin/gawk -f BEGIN { bytes =0} { temp=$(grep "datafeed\.php" | cut -d" " -f8) bytes += temp} END { printf "Number of bytes: %d\n", bytes } when I am running ./q411 an411 an411: ... (6 Replies)
Discussion started by: FUTURE_EINSTEIN
6 Replies

4. Windows & DOS: Issues & Discussions

Archive Unix script to Batch script

Hi All, I have a requirement to archive processed file and retain the archive based on the quantity.. but this is in windows. I have written a drafted shell script, and would like to have it translated into Batch script.. Please... Below is the drafted shell script ... (2 Replies)
Discussion started by: Dave Null
2 Replies

5. Shell Programming and Scripting

Can anyone find the mistake in this script file

#!/bin/ksh db_user=`echo $DB_USER_NAME` db_pwd=`echo $DB_PASSWORD` db_sid=`echo $TWO_TASK` sqlplus -s $db_user/$db_pwd@$db_sid << EOF a = select ACK_PARTY_NAME,bus_event_seq_nbr from bus_event where ack_party_name like 'MOVE_USAGE_DAEMON%' and bus_event_seq_nbr='3969094' set -- echo $a |... (17 Replies)
Discussion started by: rkrish
17 Replies

6. Shell Programming and Scripting

need help archive script

Hi all, I am new to linux and scripting so please forgive me. I need to create a script that will archive files but the max size of the archive need to be 500mb or under. I know about the archiving with parts but i want all the archives as individual archives. Can anyone point me in the correct... (7 Replies)
Discussion started by: craig0
7 Replies

7. Shell Programming and Scripting

Need some help with an archive script

I'm not sure how to solve the $month-1 thingy or the foreach sentence, so I need some help./* folders = folder1 folder2 folder3 folder4 folder5 */ month=`date +%m` if($month == 01) { prev_month = 12 } else { prev_month =... (7 Replies)
Discussion started by: JKMlol
7 Replies

8. Shell Programming and Scripting

script help .. archive

Hi All We have a landing directory where source system puts files.There are variable number of files and the file names are also varying.Each files successful transmission is identified by a .done file.If file name is xyz.dat then the confirmation file will be xyz.dat.done. I want to... (1 Reply)
Discussion started by: dr46014
1 Replies

9. Shell Programming and Scripting

Archive script

hi guru, can advise how to construct a housekeeping script using perl for the following ? find /var/tmp/logs -name "si*" -type f -exec gzip -f {} \; find /var/tmp/logs -name "*.gz" -type f -exec mv -f {} /var/tmp/log \; I found out those are not working in shell at when put them on... (1 Reply)
Discussion started by: rauphelhunter
1 Replies

10. Shell Programming and Scripting

Archive script old files

Hi All, Im trying to write a script to archive files based on the date the files were created. For example, if a group of files were created on 23rd August,I would have 230806.tar. I have a problem,I want the script to read a separately created file(readarchive.txt) to look for the path to... (1 Reply)
Discussion started by: kayarsenal
1 Replies
Login or Register to Ask a Question