将今天创建的文件(无需 FIND 命令和 SFTP)复制到另一台服务器

将今天创建的文件(无需 FIND 命令和 SFTP)复制到另一台服务器

我有一个目录,其中有“n”个文件。我正在尝试编写一个 shell 脚本,该脚本将仅列出在脚本运行的特定日期创建的文件,并将用于将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使用shell脚本,我已经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

我建议使用zshshell 来完成这项工作:

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

(m-1)所谓的 glob 限定符在哪里。

在本例中,我们选择最后 ( ) 天( ) 内*修改 ( ) 的所有 ( ) 个文件。m-1

相关内容