cp: manca il file di destinazione operando dopo

Im cercando di fare un back-up completo e copiare tutti i file da una directory ad un’altra

    #!/bin/bash 

    #getting files from this directory
    PROJECTDIRECTORY=/../../Project3 

    #Copied to this directory 
    FILEBACKUPLOCATION= /../.../FMonday

    for FILENAME in $PROJECTDIRECTORY/*
    do
        cp $FILENAME $FILEBACKUPLOCATION
        done  

Ma continuo a ricevere questo errore

./fullbackup: line 6: /../../FMonday: Is a directory
cp: missing destination file operand after
  • Hai provato senza lo spazio dopo il segno di uguale: FILEBACKUPLOCATION=/../…/FMonday
  • Non è /../../Progetto3 la stessa cosa /Progetto3? Inoltre … è fuorviante. Comunque, aggiungere slash alla fine del percorso di destinazione.
  • E ‘ anche saggio per doppia-quote variabili per evitare errori causati da questioni come spazio di caratteri nel percorso.

 

4 Replies
  1. 4

    Assegnazioni di variabili in bash script non richiedono spazio tra il nome della variabile e il valore (a meno che non indicato) entro il valore. Poiché lo spazio era presente nella linea FILEBACKUPLOCATION= /../.../FMonday, si è tentato di eseguire /../.../FMonday come un comando (che ha causato il primo errore) con FILEBACKUPLOCATION assegnata a una stringa vuota. La variabile non assegnata quando il comando più in basso provato ad usarlo (contabilità per il secondo errore).

  2. 1

    Nel mio caso, ho solo usato lo spazio utilizzato e operatore punto dopo il nome del file. Ha funzionato perfettamente.

    Per Esempio, darthVader è il nome di un file che è all’interno di F in auto. Così, ho usato il comando “mv /f/darthVader . “

  3. 1

    Ha già trovato la variabile deve essere FILEBACKUPLOCATION=/location senza spazio, anche, se possibile, cercare di rendere il vostro script un po ‘ più portatile usando qualcosa come:

    FILEBACKUPLOCATION=$HOME/backup/FMonday

    In questo caso, il percorso è relativo al vostro utente $HOME variabile di ambiente.

    Di andare avanti, se si desidera mantenere 2 file sincronizzati probabilmente si potrebbe fare di meglio con rsync uno dei vantaggi è che copia solo i file che non esistono o l’aggiornamento di quelli che sono stati modificati.

    È infatti possibile creare un alias per copiare/sincronizzazione dei file su richiesta, ad esempio:

    alias cpr="rsync --delete --archive --numeric-ids --human-readable --no-compress --whole-file --verbose --info=progress2"

    Quindi se si desidera sincronizzare il contenuto di /dir/foo in /dir/bar, potrebbe semplicemente fare:

    $ cpr /dir/foo/ /dir/bar/

    Tuo script, poi, potrebbe essere qualcosa di simile:

    #!/bin/sh
    
    ORIGIN=/path/to/foo/
    DESTINATION=/path/to/bar/
    
    rsync --delete \
    --archive \
    --numeric-ids \
    --human-readable \
    --no-compress \
    --whole-file \
    --verbose \
    --info=progress2 \
    $ORIGIN $DESTINATION

    Si noti che in questo caso le opzioni --no-compress e --whole-file sono utilizzati, principalmente perché i file verranno copiati in locale, se questo, in cui un server remoto opzioni potrebbero essere differenti, a controllare questo post (Il più veloce directory remota rsync tramite ssh archivistica posso radunare (40MB/s in più di 1 gb schede di rete)

Lascia un commento