我有一个目录,其中有“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
我建议使用zsh
shell 来完成这项工作:
cp *(m-1) /home/oracle/SABARISH/logs/files/
(m-1)
所谓的 glob 限定符在哪里。
在本例中,我们选择最后 ( ) 天( ) 内*
修改 ( ) 的所有 ( ) 个文件。m
-
1