2017-05-28 113 views
2

我已经设置了带有“SSH Server”应用程序的Android手机,并且希望编写脚本以使用scp在特定目录下载最新文件。该脚本将从Linux笔记本电脑运行scp /从远程Android设备/ SSH服务器安全复制最新文件

问题是,Android不包含像“头”或“尾巴”的命令,我不知道如何选择最新的文件。

我能做的最好的是所有的文件从这个目录复制:

#!/bin/bash 
[email protected]:storage/sdcard0/DCIM/Camera 
scp -P 60839 -oHostKeyAlgorithms=+ssh-dss $dst/* /home/username/projects/3patetas 
done 0 

谁能帮助?

-------编辑-------------

我认为以下可能的工作,但它会导致对Android的SSH服务器停止:

#!/bin/bash 
remote_dir=/storage/sdcard0/DCIM/Camera 
[email protected] 
scp -P 60839 -oHostKeyAlgorithms=+ssh-dss $dst:'ssh $dst cd $remote_dir ; latest="" ; for i in *.jpg ; do latest=$i ; done ; echo $latest' /home/username/projects/3patetas 
exit 0 
+0

'LS -1T | grep -m 1 .'? – Cyrus

+0

谢谢。 “grep -m 1”。部分工作,就像管道一样,但“ls”不识别“-1t” – escuta

+0

“ls -t | grep -m 1”。就足够了,但是ls没有-t选项 – escuta

回答

0

这有帮助吗?

#!/bin/bash 
remote_dir=/storage/sdcard0/DCIM/Camera 
[email protected] 
name="$(ssh $dst "cd $remote_dir"' ; latest="" ; for i in *.jpg ; do latest=$i ; done ; echo $latest')" 
scp -P 60839 -oHostKeyAlgorithms=+ssh-dss $dst:$remote_dir/$name /home/username/projects/3patetas 
exit 0 

或者这样:

#!/bin/bash 
remote_dir=/storage/sdcard0/DCIM/Camera 
[email protected] 
name=($(ssh $dst "cd $remote_dir"' ; for i in *.jpg ; do date +%s -r $i ; echo $i ; done')) 
name=$(printf "%s %s\n" ${name[@]} | sort -n | tail -1) 
scp -P 60839 -oHostKeyAlgorithms=+ssh-dss $dst:$remote_dir/${name#* } /home/username/projects/3patetas 
exit 0 
+0

非常感谢。这更好。我需要将端口号和主机密钥类型添加到“名称”变量,即。 #!/斌/庆典 remote_dir = /存储/ sdcard0/DCIM /摄像机 [email protected] NAME = “$(SSH -p 60839 -oHostKeyAlgorithms = + SSH-DSS $ DST” CD $ remote_dir “'; latest =”“; for i in * .jpg; do latest = $ i; done; echo $ latest')” scp -P 60839 -oHostKeyAlgorithms = + ssh-dss $ dst:$ remote_dir/$ name /家用/伊恩/项目/ 3patetas 退出0 然而,它提供了一个奇怪的错误消息: [email protected]不是普通文件 – escuta

+0

@escuta和BTW检查替代verison我刚刚发布。 Android确实有'date'和'echo',剩下的代码在本地运行确保文件真的是修改日期的最后一个。 – hidefromkgb

+0

谢谢,试过第二个版本。它仍然遇到了同样的问题 - 错误消息:[email protected]不是一个普通的文件 – escuta

相关问题