我有一个目录,里面有一些文件夹和一些文件。假设这是我当前的目录,如下所示pwd
命令 -
david@slc4b03c:/bat/data/snapshot$ pwd
/bat/data/snapshot
我已登录machineA
。
此/bat/data/snapshot
目录中将包含一些文件夹和一些文件,如下所示 -
david@slc4b03c:/bat/data/snapshot$ ls -lt
total 22400264
drwxr-xr-x 2 cronusapp app 102400 2013-12-22 04:01 20131222
drwxr-xr-x 2 cronusapp app 102400 2013-12-16 03:00 20131215
-rw-r--r-- 1 cronusapp app 26412620 2013-12-13 02:04 weekly_003_5.data
-rw-r--r-- 1 cronusapp app 26492037 2013-12-13 02:02 weekly_003_5.data
-rw-r--r-- 1 cronusapp app 26480695 2013-12-13 02:02 weekly_003_5.data
-rw-r--r-- 1 cronusapp app 26475266 2013-12-13 02:02 weekly_003_5.data
-rw-r--r-- 1 cronusapp app 26471366 2013-12-13 02:02 weekly_003_5.data
-rw-r--r-- 1 cronusapp app 26455311 2013-12-13 02:02 weekly_003_5.data
所以我拥有的两个文件夹是20131222
和20131215
,如上所示..现在我想从中提取最新的文件夹,因为它是最近的20131222
与20131215
相比,然后像这样制作完整的路径 -
/bat/data/snapshot/20131222/
因为我需要在从该机器执行scp到另一台机器时使用此完整路径,
下面是我的shell脚本,其中我使用20131222
硬编码了当前最近的路径,但一般情况下,我需要通过使用下面的shell脚本查看哪个文件夹是最新的文件夹来创建完整路径。
#!/bin/bash
readonly LOCATION=/bat/data/snapshot
scp david@slc4b03c.slc.host.com:/bat/data/snapshot/20131222/weekly_003_5.data /data01/primary/.
上面的shell脚本我不会从machineA运行。我将从不同的机器运行,让我们说它是machineB
。
是否可以在shell脚本中执行此操作?
答案 0 :(得分:0)
很多方法可以做到这一点,但我的方式是快速和快速脏是使用find
和sort
以及tail
:
dir=`find $LOCATION -type d | sort | tail -1`
通过指定$LOCATION
作为find
的路径,您将自动获取输出前面的目录,这应该让sort
和tail
为您提供答案没有任何进一步插入当前目录。
答案 1 :(得分:0)
我认为,您正在寻找特定目录的最新目录,请使用以下命令获取最新导演并分配任何变量
ls | sort | tail -1
答案 2 :(得分:-1)
dir=$(ls -dt1 "$LOCATION"/*/ | head -n1)
scp "david@slc4b03c.slc.host.com:$dir"/weekly_003_5.data /data01/primary/.
如果最新目录的名称包含换行符,则上述操作将失败。从您的示例来看,这对您来说似乎不是问题。
如果您希望目录名称采用日期(YYYYMMDD)的形式,请根据您的示例:
dir=$(ls -dt1 "$LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/ | head -n1)