Copie o diretório da árvore do ponto específico

0

Agora tenho certeza de como dizer isso, mas:

Estou copiando todos os arquivos .zip mais recentes em cada subdiretório recursivo dentro dessa pasta original:

"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original"

Por exemplo

"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original/test1/zip11.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original/test1/zip12.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original/test2/zip21.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original/test2/test3/zip31.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original/test2/test3/zip32.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original/test2/test3/zip33.zip"

Isto iria copiar zip12.zip, zip21.zip, zip33.zip (estes são os mais novos em cada diretório) para a pasta de backup.

Eu tenho este trabalho, então tudo isso copia para este diretório:

"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup"

Então parece que:

"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup/zip12.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup/zip21.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup/zip33.zip"

Eu quero usar a mesma estrutura de árvore (do original em diante) para que pareça:

"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup/test1/zip12.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup/test2/zip21.zip"
"/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup/test2/test3/zip33.zip"

Alguém pode me apontar na direção certa?

Aqui está o meu código:

#THE DIRECTORY THE ORIGINAL FILE IS STORED IN
MYDIR="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original"

#THE DIRECTORY THE BACKUP FILE WILL BE STORED IN
DEST="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup1/"

#FIND ALL DIRECTORIES AND NAME TEMP DIRECTORY AS CURRENT DIRECTORY
find "${MYDIR}" -type d | while read CURRENTDIRECTORY;
    do 

        #FINDS THE NEWEST ZIP FILE IN T HE DIRECTORY
        NEWESTFILE='ls -dtr1 "${CURRENTDIRECTORY}"/*.zip | tail -n 1'
        echo "NF = $NEWESTFILE"

        #CHECK IF FILE IS PRESENT
        if [ -z "${NEWESTFILE}" ] ; then
            echo "No file to copy"

        #CHECK IF FILE IS A DIRECTORY
        elif [ -d "${NEWESTFILE}" ] ; then
            echo "Newest file is a directory"

        #COPY NEWEST FILE TO DEST
        else
            echo "Copying ${NEWESTFILE} --> ${DEST}"
            cp -p "${NEWESTFILE}" "${DEST}"
        fi

    done
    
por smj2393 10.04.2015 / 13:45

1 resposta

1

Você pode usar rsync em vez de cp :

rsync -R "${CURRENTDIRECTORY}"/"${NEWESTFILE}" "${DEST}"

Para limitar o caminho de saída a ser relativo a MYDIR (por exemplo, test1/zip12.zip ), você precisará inserir o diretório antes do loop de localização: cd $MYDIR e posterior find . .

Se você mantiver arquivos antigos no diretório de backup, poderá até substituir o script inteiro usando rsync --ignore-existing . Seria apenas copiar novos arquivos.

Leia mais em man rsync .

    
por 10.04.2015 / 15:50