"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