正在从 Linux 的 ftp 中的文件夹中加载 2 个最新文件
Loading the 2 most recent files from a folder in an ftp from Linux
大家下午好,
我们有以下内容:
- 在服务器 X 上,我们每 15 分钟(通常)生成一些文件。此文件有 2 种类型 - .csv 和 .log
- 我们需要抓取最近的2个文件并把它们带到服务器Q中,解析它们以删除“:”并替换为例如“-”;
- 将它们加载到 ftp 服务器中;
目前的代码是这样的:
`#!/bin/bash
X=ip.address
USER=myuser
SRC_DIR=/home/user/GETFILES/temp/
DEST_DIR=/home/user/GETFILES/input
date1=`date +%Y%m%d%H%M`
echo "======================================="
echo "======================================="
echo "======================================="
echo "Here we go $date1 !"
echo "======================================="
echo "======================================="
echo "======================================="
rsync -av --ignore-existing --include="patternforfiles\*.*" --exclude="*" -e "ssh -p port -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" $USER@$X:$SRC_DIR\* $DEST_DIR
\#Removing the ":"
cd temp/
for i in *:*; do
mv -- "$i" "${i//:/\-}"
done
**for i in `ls -Art SRC_DIR | grep filename | tail -n 2`;do**
**mv $SRC_DIR$i $DEST_DIR;**
**done**
sshpass -p "password" sftp -oPort=port user@ftp.address \<\< !
lcd /source/directory/
put filename\*.\*
bye
!`
bla bla
清扫任务
如果我 运行 作为一个单独的命令,ls -Art 部分工作正常,它会从 rsync 路径给我带来最后 2 个文件。如果我 运行 在脚本下,它会带来另外 2 个文件,然后是使用上一个命令获得的文件……不知道为什么。
我在 ls 中错过了什么?
谢谢。
建议在 ls -Art
命令中每行有一个以上的文件。
dudi@IL105567WIN:~$ ls -Art
.profile .landscape .sudo_as_admin_successful dev .motd_shown .lesshsQ
.bashrc .vimrc .local .selected_editor .hushlogin .viminfo
.bash_logout .vim .cache .config .lesshst .bash_history
使用带有选项 -1
或 -l
的 ls
命令通过在单独的行中打印每个文件来解决此问题。
dudi@IL105567WIN:~$ ls -1Art
.profile
.bashrc
.bash_logout
.landscape
.vimrc
.vim
.sudo_as_admin_successful
.local
.cache
dev
.selected_editor
.config
.motd_shown
.hushlogin
.lesshst
.lesshsQ
.viminfo
.bash_history
大家下午好, 我们有以下内容:
- 在服务器 X 上,我们每 15 分钟(通常)生成一些文件。此文件有 2 种类型 - .csv 和 .log
- 我们需要抓取最近的2个文件并把它们带到服务器Q中,解析它们以删除“:”并替换为例如“-”;
- 将它们加载到 ftp 服务器中;
目前的代码是这样的:
`#!/bin/bash
X=ip.address
USER=myuser
SRC_DIR=/home/user/GETFILES/temp/
DEST_DIR=/home/user/GETFILES/input
date1=`date +%Y%m%d%H%M`
echo "======================================="
echo "======================================="
echo "======================================="
echo "Here we go $date1 !"
echo "======================================="
echo "======================================="
echo "======================================="
rsync -av --ignore-existing --include="patternforfiles\*.*" --exclude="*" -e "ssh -p port -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" $USER@$X:$SRC_DIR\* $DEST_DIR
\#Removing the ":"
cd temp/
for i in *:*; do
mv -- "$i" "${i//:/\-}"
done
**for i in `ls -Art SRC_DIR | grep filename | tail -n 2`;do**
**mv $SRC_DIR$i $DEST_DIR;**
**done**
sshpass -p "password" sftp -oPort=port user@ftp.address \<\< !
lcd /source/directory/
put filename\*.\*
bye
!`
bla bla 清扫任务
如果我 运行 作为一个单独的命令,ls -Art 部分工作正常,它会从 rsync 路径给我带来最后 2 个文件。如果我 运行 在脚本下,它会带来另外 2 个文件,然后是使用上一个命令获得的文件……不知道为什么。 我在 ls 中错过了什么?
谢谢。
建议在 ls -Art
命令中每行有一个以上的文件。
dudi@IL105567WIN:~$ ls -Art
.profile .landscape .sudo_as_admin_successful dev .motd_shown .lesshsQ
.bashrc .vimrc .local .selected_editor .hushlogin .viminfo
.bash_logout .vim .cache .config .lesshst .bash_history
使用带有选项 -1
或 -l
的 ls
命令通过在单独的行中打印每个文件来解决此问题。
dudi@IL105567WIN:~$ ls -1Art
.profile
.bashrc
.bash_logout
.landscape
.vimrc
.vim
.sudo_as_admin_successful
.local
.cache
dev
.selected_editor
.config
.motd_shown
.hushlogin
.lesshst
.lesshsQ
.viminfo
.bash_history