LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   Shell script which will check the target file and folder exists and copy it (https://www.linuxquestions.org/questions/linux-newbie-8/shell-script-which-will-check-the-target-file-and-folder-exists-and-copy-it-4175525444/)

agent_mach 11-14-2014 09:07 PM

Shell script which will check the target file and folder exists and copy it
 
Hi All,

I am a beginner in this and trying to write a shell script which will :

1. Ask for a file name and check if its exists.
2. If file exists only then it will ask for the new target folder, after entering target folder name it will check if it exists.
3. If target folder exists it will copy that file in to it.

I have written the below code and it's working fine if file and folder exists but not working properly when any of them is not exists.

Code:

#!/bin/bash

read -p "Enter file name : " filename
echo "Please wait checking if $filename exists ..."

if [ -f "${filename}" ]

then

        echo "File $filename exist."
        read -p "Enter location to copy $filename : " location

else

        echo "$0: $filename not found."

fi
                if [ -d "${location}" ]

                then

                        echo "Target location found. Initiating file copy to $location."
                        cp -v "$filename" "$location"
                        echo "$filename copied to $location."

                else

                        echo "$0: $location not found."

                fi



Please let me know if i missed something.

Thanks,
Ashish

Teufel 11-14-2014 10:18 PM

I did not test your code, but there obvious error:
You put the second if-else-fi construction in a wrong place.
Try this:

Code:

#!/bin/bash

read -p "Enter file name : " filename
echo "Please wait checking if $filename exists ..."

if [ -f "${filename}" ]
then
        echo "File $filename exist."
        read -p "Enter location to copy $filename : " location
        if [ -d "${location}" ]
        then
            echo "Target location found. Initiating file copy to $location."
            cp -v "$filename" "$location"
            echo "$filename copied to $location."
        else
            echo "$0: $location not found."
        fi
else
        echo "$0: $filename not found."
fi


agent_mach 11-17-2014 07:50 AM

Hi Teufel. thanks for the help.

Now i am trying to do :

1. Ask for a file name and check if its exists.
2. If file exists only then it will ask for the new target folder, after entering target folder name it will check if it exists, if doesn't exits it will create one with with the $location value.
3. It will copy that file in to it.


I have made below changes in to above script. Its working but i facing minor issue in it:

If i am trying to copy existing file in to non existing folder it's working fine and throwing below message

Code:

/etc/inittab copied to /OOO.
But if i am copying existing file in to existing folder i am not getting above message.

Code:

#!/bin/bash

read -p "Enter file name : " filename
echo "Please wait checking if $filename exists ..."

if [ -f "${filename}" ]
then
    echo "File $filename exist."
    read -p "Enter location to copy $filename : " location

    if [ -d "${location}" ]
    then
        echo "Target location found. Initiating file copy to $location."
        cp -v "$filename" "$location"
    else
        echo "$location not found ! Creating..."
        mkdir -p "$location"
        echo "$location folder created. Copying $filename to $location ..."
        cp -v "$filename" "$location"

        if [ $? -eq 0 ]
        then
                echo "$filename copied to $location."
        else
                echo "ERROR while copying $filename to $location. Please check write permission or disk space and try again !!!"
        fi

    fi

else
    echo "$filename not found."
fi


I will really appreciate if you point out needed changes.

Thanks,
Ashish

agent_mach 11-17-2014 08:15 AM

Issue resolved after :


Code:

#!/bin/bash

read -p "Enter file name : " filename
echo "Please wait checking if $filename exists ..."

if [ -f "${filename}" ]
then
    echo "File $filename exist."
    read -p "Enter location to copy $filename : " location

    if [ -d "${location}" ]
    then
        echo "Target location found. Initiating file copy to $location."
        cp -v "$filename" "$location"
    else
        echo "$location not found ! Creating..."
        mkdir -p "$location"
        echo "$location folder created. Copying $filename to $location ..."
        cp -v "$filename" "$location"
    fi
        if [ $? -eq 0 ]
        then
                echo "$filename copied to $location."
        else
                echo "ERROR while copying $filename to $location. Please check write permission or disk space and try again !!!"
        fi

else
    echo "$filename not found."
fi


Teufel 11-17-2014 08:30 AM

Quote:

Code:

    if [ -d "${location}" ]
    then
        echo "Target location found. Initiating file copy to $location."
        cp -v "$filename" "$location"
    else
        echo "$location not found ! Creating..."
        mkdir -p "$location"
        echo "$location folder created. Copying $filename to $location ..."
        cp -v "$filename" "$location"
    fi


if-else-fi block is excessive. It might be much more simpler:
Code:

mkdir -p "$location"
cp -v "$filename" "$location" && echo "$filename copied to $location."

-p option suppresses error message if directory already exists.

chrism01 11-18-2014 01:33 AM

I recommend http://tldp.org/LDP/abs/html/testcon...ml#DBLBRACKETS

Also, in your case,
Code:

if [ -d "${location}" ]
the {}'s are redundant

For debugging, try
Code:

#!/bin/bash
set -xv



All times are GMT -5. The time now is 06:18 AM.