如何在目录中找到最新文件夹,然后相应地创建完整路径?

时间:2013-12-24 00:54:06

标签: linux bash shell unix ubuntu

我有一个目录,里面有一些文件夹和一些文件。假设这是我当前的目录,如下所示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

所以我拥有的两个文件夹是2013122220131215,如上所示..现在我想从中提取最新的文件夹,因为它是最近的2013122220131215相比,然后像这样制作完整的路径 -

/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脚本中执行此操作?

3 个答案:

答案 0 :(得分:0)

很多方法可以做到这一点,但我的方式是快速和快速脏是使用findsort以及tail

的组合
dir=`find $LOCATION -type d | sort | tail -1`

通过指定$LOCATION作为find的路径,您将自动获取输出前面的目录,这应该让sorttail为您提供答案没有任何进一步插入当前目录。

答案 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)