Tanmay Awasthi
Tanmay Awasthi

Reputation: 79

File exists but showing no such file or directory

I am trying to perform a set of terminal operations using bash shell script. Below is my code

#!/bin/bash
FILE_DATE=`date '+%Y%m%d'`
ARCHIVE_DIR="/home/tanmay/backup/"
TAR_GZ=".tar.gz"
PATH=( "/home/tanmay/Downloads/apache-tomcat-7.0.69/logs" "/home/tanmay/Downloads/apache-tomcat-7.0.69/webapps" )
FOLDER=("logs" "webapps" )
for number in {0..1..1}
do
    echo ${PATH[number]}
    echo ${FOLDER[number]}
    rsync -vrzh ${PATH[number]} ${ARCHIVE_DIR}
    tar -zcvf ${ARCHIVE_DIR}/${FOLDER[number]}${TAR_GZ} ${ARCHIVE_DIR}/${FOLDER[number]}
    rm -rf ${ARCHIVE_DIR}/${FOLDER[number]}
    if [ -f ${ARCHIVE_DIR}/${FOLDER[number]}${TAR_GZ} ]
    then
        mv ${ARCHIVE_DIR}${FOLDER[number]}${TAR_GZ} ${ARCHIVE_DIR}${FOLDER[number]}_${FILE_DATE}${TAR_GZ}
    fi    
done

When I run this script, both the echo is showing the correct values. But operations (rsync,tar..) are returning file not found. Below is the output

/home/tanmay/Downloads/apache-tomcat-7.0.69/logs
logs
./server_data_backup_updated.sh: line 11: rsync: No such file or directory
./server_data_backup_updated.sh: line 12: tar: No such file or directory
./server_data_backup_updated.sh: line 13: rm: No such file or directory
/home/tanmay/Downloads/apache-tomcat-7.0.69/webapps
webapps
./server_data_backup_updated.sh: line 11: rsync: No such file or directory
./server_data_backup_updated.sh: line 12: tar: No such file or directory
./server_data_backup_updated.sh: line 13: rm: No such file or directory

UPDATE 1

Using one array instead on two. It is working now.

#!/bin/bash
FILE_DATE=`date '+%Y%m%d'`
ARCHIVE_DIR="/home/tanmay/backup/"
TAR_GZ=".tar.gz"
array=( "/home/tanmay/Downloads/apache-tomcat-7.0.69/logs" 
    "logs" 
    "/home/tanmay/Downloads/apache-tomcat-7.0.69/webapps" 
    "webapps")

for number in {0..2..2}
do
    rsync -vrzh ${array[number]} ${ARCHIVE_DIR}
    tar -zcvf ${ARCHIVE_DIR}/${array[number+1]}${TAR_GZ} ${ARCHIVE_DIR}/${array[number+1]}
    rm -rf ${ARCHIVE_DIR}/${array[number+1]}
    if [ -f ${ARCHIVE_DIR}/${array[number+1]}${TAR_GZ} ]
    then
        mv ${ARCHIVE_DIR}${array[number+1]}${TAR_GZ} ${ARCHIVE_DIR}${array[number+1]}_${FILE_DATE}${TAR_GZ}
    fi    
done

Upvotes: 0

Views: 2871

Answers (1)

William Pursell
William Pursell

Reputation: 212248

When you reset PATH, the shell can no longer find the executable rsync. When the shell reads the word rsync, it looks through the variable named PATH (which it expects to be a colon separated list of directories, not an array) for a file named rsync. Similarly for tar and rm. The error messages you see are simply telling you that those commands are not found in your PATH.

Upvotes: 2

Related Questions