Copie os arquivos que são criados hoje sem o comando FIND e o SFTP para outro servidor

1

Eu tenho um diretório com 'n' número de arquivos nele. Eu estou tentando escrever um script de shell que listará apenas os arquivos criados no dia específico em que o script está sendo executado e usará sftp para mover os arquivos listados para o dia em outro servidor. Eu não quero usar find .

Eu tentei usar

ls -l  --time-style=+%D | grep $(date +%D) | grep -v '^d'

para listar os arquivos criados para hoje. Como faço para copiar os arquivos listados para outro diretório, para que eu possa sftp o diretório para outro servidor. Eu tentei o comando abaixo, mas não uso

ls -l  --time-style=+%D | grep $(date +%D) | grep -v '^d' > /home/oracle/SABARISH/logs/files/

E como eu faço sftp usando o shell script, eu tentei sftp na linha de comando, mas é diferente quando usado no script.

    
por sabarish jackson 15.06.2016 / 11:38

2 respostas

3

Você pode fazer algo assim:

files=$( ls -l --time-style=+%D | grep $(date +%D) | grep -v '^d' | awk '{print $NF}' ) ; for f in $files ; do cp -rf $f /home/oracle/SABARISH/logs/files/ ; done ; sftp {user}@{host}:{remote_dir} <<< 'put /home/oracle/SABARISH/logs/files/*'

ou similarmente:

for f in $(ls -l --time-style=+%D | grep $(date +%D) | grep -v '^d' | awk '{print $NF}') ; cp -rf $f /home/oracle/SABARISH/logs/files/ ; done ; sftp {user}@{host}:{remote_dir} <<< 'put /home/oracle/SABARISH/logs/files/*'

O awk é usado para extrair nomes de arquivos.

#!/bin/bash
FILES=$(ls -l test1_*.txt --time-style=+%D | grep ${DATE} | grep -v '^d' | awk '{p rint $NF}' )

if [ -n "${FILES}" ]
then
    for f in ${FILES}
    do
        cp -prf ${f} ${DESTINATION}
    done
    sftp ${USER}@${HOST}:${CD} <<< 'put /home/oracle/SABARISH/logs/sftp/*'
else
    echo "NO FILES TO MOVE"
fi
    
por 15.06.2016 / 11:50
1

Eu recomendo usar zsh shell para este trabalho:

cp *(m-1) /home/oracle/SABARISH/logs/files/

onde (m-1) é chamado de qualificador glob.

Nesse caso, selecionamos todos os arquivos ( * ) modificados ( m ) no ( - ) último dia ( 1 ).

    
por 15.06.2016 / 11:56