não consigo fazer cd para um erro de diretório ao mover arquivos para outro diretório

não consigo fazer cd para um erro de diretório ao mover arquivos para outro diretório

Eu escrevi o código a seguir para MOVER TODOS OS ARQUIVOS DE TRACE CRIADOS ANTES DE 2 MINUTOS PARA UM DIRETÓRIO SEPARADO. Agora, quando estou codificando o caminho de origem e de destino no script, ele está funcionando bem; mas quando os passo como variáveis, recebo uma mensagem de erro. A seguir está meu código:

##THIS SCRIPT WILL MOVE ALL THE TRACE FILES CREATED BEFORE 2 MINUTES TO A SEPARATE DIRECTORY
cd /home/adhikarisubir/test/basic_unix  //MY TRACE_BKP.SH FILE EXISTS HERE
#TRACE_PATH=/home/adhikarisubir/test/basic_unix
#BKUP_PATH=/home/adhikarisubir/test_bkp
MINUTES=$1  #IT WILL GET THE NUMBER OF MINUTES FROM THE COMMAND LINE
TRACE_PATH=$2   #INSTEAD OF HARD-CODING TAKING PATHS AS VARIABLE
BKUP_PATH=$3    #^^
echo $MINUTES   
echo $BKUP_PATH
echo $TRACE_PATH
cd $TRACE_PATH
echo $pwd

for i in `find . -cmin +$MINUTES -name "*.trc"`  ##FINDING FILES WITH EXTENSTION .TRC WHICH ARE OLDER THAN GIVEN MINUTES
do
echo "Moving files $i, size `du -h $i`, which are older than $MINUTES minutes"
echo $i
mv $i $BKUP_PATH
done

Estou executando o código como:

adhikarisubir@ubuntu:~/test/basic_unix$ sh trace_bkp.sh 2 home/adhikarisubir/test/basic_unix home/adhikarisubir/test_bkp

A saída do erro é:

2
home/adhikarisubir/test_bkp
home/adhikarisubir/test/basic_unix
trace_bkp.sh: 11: cd: can't cd to home/adhikarisubir/test/basic_unix 

Moving files ./elnc.trc, size 0 ./elnc.trc, which are older than 2 minutes
./elnc.trc
mv: cannot move ‘./elnc.trc’ to ‘home/adhikarisubir/test_bkp’: No such file or directory
Moving files ./ph.trc, size 0   ./ph.trc, which are older than 2 minutes
./ph.trc
mv: cannot move ‘./ph.trc’ to ‘home/adhikarisubir/test_bkp’: No such file or directory

Responder1

Uma reescrita:

#!/bin/bash

minutes=$1
trace_path=$2
bkup_path=$3

if [[ ! -d "$trace_path" ]]; then
    echo "Error: trace_path '$trace_path' is not a directory" >&2
    exit 1
fi
if [[ ! -d "$bkup_path" ]]; then
    echo "Error: bkup_path '$bkup_path' is not a directory" >&2
    exit 1
fi

echo "Moving files which are older than $minutes minutes"
find "$trace_path" -cmin +"$minutes" -name "*.trc" -exec mv -v -t "$bkup_path" '{}' \+

Notas:

  • você não precisa ir cda lugar nenhum
    • se você quiser mudar o diretório para onde está o script, faça o seguinte:cd "$(dirname "$0")"
  • sempre cite seu, "$variables"a menos que você saiba exatamente quando deixar as aspas desativadas
  • não use UPPER_CASE_VARS: um dia vocêacidentalmente escreverPATH=fooe então me pergunto por que seu script está quebrado
  • validar a entrada do usuário
  • findpode fazer coisas com os arquivos que encontra.
  • mvtem opções, verifique sua página de manual

informação relacionada