não pode cd para um erro de diretório enquanto move arquivos para outro diretório

1

Eu escrevi o seguinte código para MOVER TODOS OS ARQUIVOS DE RASTOS CRIADOS ANTES DE 2 MINUTOS PARA UM DIRETÓRIO SEPARADO. Agora, quando estou codificando o caminho de origem e destino no script, ele está funcionando bem; mas quando eu estou passando por eles como variável, estou recebendo 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
    
por Mistu4u 21.12.2014 / 19:38

1 resposta

2

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 cd em qualquer lugar
    • se você quiser alterar dir para onde o script está, faça isso: cd "$(dirname "$0")"
  • sempre cite seu "$variables" , a menos que você saiba exatamente quando deixar as citações fora
  • não use UPPER_CASE_VARS: um dia você acidentalmente escreverá PATH=foo e, em seguida, perguntará por que seu script é quebrado
  • valide a entrada do usuário
  • find pode fazer coisas com os arquivos que encontra.
  • mv tem opções, verifique sua página de manual
por glenn jackman 22.12.2014 / 04:14