如何在目录中找到最新的日期文件夹,然后在shell脚本中构造命令?

时间:2014-10-28 04:33:31

标签: linux bash shell unix

我有一个目录,其中我将有一些日期格式(YYYYMMDD)的文件夹,如下所示 -

david@machineX:/database/batch/snapshot$ ls -lt
drwxr-xr-x 2 app kyte 86016 Oct 25 05:19 20141023
drwxr-xr-x 2 app kyte 73728 Oct 18 00:21 20141016
drwxr-xr-x 2 app kyte 73728 Oct  9 22:23 20141009
drwxr-xr-x 2 app kyte 81920 Oct  4 03:11 20141002

现在我需要从/database/batch/snapshot目录中提取最新的日期文件夹,然后在我的shell脚本中构建命令,如下所示 -

./file_checker --directory /database/batch/snapshot/20141023/  --regex ".*.data" > shardfile_20141023.log

下面是我的shell脚本 -

#!/bin/bash

./file_checker --directory /database/batch/snapshot/20141023/ --regex ".*.data" > shardfile_20141023.log

# now I need to grep shardfile_20141023.log after above command is executed

如何在shell脚本中找到最新的日期文件夹并构造上述命令?

3 个答案:

答案 0 :(得分:1)

看,这是方法之一,只是grep只有8位数的文件夹:

ls -t1 | grep -P -e "\d{8}" | head -1

ls -t1 | grep -E -e "[0-9]{8}" | head -1

答案 1 :(得分:0)

您可以在脚本中尝试以下操作:

  

pushd / database / batch / snapshot

     

LATESTDATE =`ls -d * | sort -n |尾巴-1`

     

POPD

     

./ file_checker --directory / database / batch / snapshot / $ {LATESTDATE} / --regex“。*。data”> shardfile _ $ {LATESTDATE}的.log

答案 2 :(得分:0)

请参阅BashFAQ#099 aka "How can I get the newest (or oldest) file from a directory?"

话虽如此,如果您不关心实际的修改时间,只想根据名称找到最新的目录,您可以使用数组和通配(注意:带有globbing的排序顺序取决于{ {1}}):

LC_COLLATE