오늘 생성된 파일(FIND 명령 및 SFTP 없이)을 다른 서버에 복사합니다.

오늘 생성된 파일(FIND 명령 및 SFTP 없이)을 다른 서버에 복사합니다.

"n"개의 파일이 있는 디렉토리가 있습니다. 스크립트가 실행되는 특정 날짜에 생성된 파일만 나열하고 sftp해당 날짜에 나열된 파일을 다른 서버로 이동하는 데 사용되는 셸 스크립트를 작성하려고 합니다 . 나는 그것을 사용하고 싶지 않습니다 find.

나는 사용하려고

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

오늘 생성된 파일을 나열합니다. sftp디렉토리를 다른 서버에 복사 할 수 있도록 나열된 파일을 다른 디렉토리에 복사하려면 어떻게 해야 합니까 ? 다음 명령을 시도했지만 작동하지 않았습니다.

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

sftp쉘 스크립트를 어떻게 사용합니까 ? sftp명령줄에서 사용해 보았지만 스크립트에서 사용할 때는 다릅니다.

답변1

다음을 수행할 수 있습니다.

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/*'

또는 다음과 같은 것:

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/*'

awk는 파일 이름을 추출하는 데 사용됩니다.

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

답변2

zsh작업을 수행하려면 쉘을 사용하는 것이 좋습니다 .

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

(m-1)소위 glob 한정자는 어디에 있습니까?

*이 예에서는 지난 ( )일 ( ) 동안 수정된 ( ) 모든 ( ) 파일을 선택합니다 .m-1

관련 정보