kann nicht in ein Verzeichnis wechseln, Fehler beim Verschieben von Dateien in ein anderes Verzeichnis

kann nicht in ein Verzeichnis wechseln, Fehler beim Verschieben von Dateien in ein anderes Verzeichnis

Ich habe den folgenden Code geschrieben, um ALLE VOR 2 MINUTEN ERSTELLTEN TRACE-DATEIEN IN EIN SEPARATES VERZEICHNIS ZU VERSCHIEBEN. Wenn ich jetzt den Quell- und Zielpfad im Skript fest codiere, funktioniert es einwandfrei. Wenn ich sie jedoch als Variable übergebe, erhalte ich eine Fehlermeldung. Folgendes ist mein Code:

##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

Ich führe den Code wie folgt aus:

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

Die Fehlerausgabe lautet:

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

Antwort1

Eine Neufassung:

#!/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" '{}' \+

Anmerkungen:

  • du brauchst cdnirgendwohin
    • Wenn Sie das Verzeichnis in das Verzeichnis des Skripts ändern möchten, gehen Sie wie folgt vor:cd "$(dirname "$0")"
  • immer in Anführungszeichen setzen, "$variables"es sei denn, Sie wissen genau, wann Sie die Anführungszeichen weglassen müssen
  • benutze keine UPPER_CASE_VARS: eines Tages wirst duversehentlich schreibenPATH=foound sich dann wundern, warum Ihr Skript kaputt ist
  • Benutzereingaben validieren
  • findkann mit den gefundenen Dateien etwas anfangen.
  • mvhat Optionen, überprüfen Sie die Manpage

verwandte Informationen