我正在编写一个 bash 脚本,该脚本需要*_out.csv
从远程服务器上的目录中获取所有内容。所有这些文件都是另一个目录深处的几个目录。例如,假设目录名为ox_20190404/
. 我可以通过以下方式找到我的所有文件:
find ox_20190404/assessment/LWR/validation -type f -name "*_out.csv"
这个问题回答了我的部分问题,但是由于我不想完整地复制目录,所以我需要弄清楚如何实现上述代码。假设我从这个开始:
$ dir="/projects/ox/git"
$ server="myusername@server"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .
我将如何从那里获取我需要的文件?
我的问题的最后一部分想知道是否有一种方法可以获取所有复制的文件并将它们放在远程服务器上的相同文件路径和目录中。
我已经稍微调整了一些变量名。
当然,有比解析 ls 的输出这样危险的方法更好的方法,但看看这是否适合你:
一旦
dir
被设置为最新的远程目录,mkdir -p
用于确保本地存在相同的目录名。然后scp
将文件放入与远程目录具有相同路径和名称的本地目录。我一直在寻找 rsync 解决方案,但想不出一个。这将找到最近修改(创建)的目录,假设目录名称不包含换行符 (
\n
)如果您可以保证目标仅包含感兴趣的目录,则可以大大简化它(同样,请记住换行问题)
您可以使用 复制整个文件树
scp
,但如果您想过滤它,最好使用rsync
如果您将前一组文件保存在本地,并且您真的只想添加最新组而不复制以前的文件,
rsync
也可以这样做这是最终为我工作的代码。我可能没有完美地描述我的问题,但我没有遇到最近更改的目录的问题。然后我的问题是找到该目录中的所有文件并确保它们最终位于我本地计算机上的正确位置。这是执行此操作的 bash 脚本:
脚本: