如何查找包含上次日期测试的目录?

时间:2014-02-06 18:59:34

标签: linux bash shell sed grep

我有一个包含许多文件和目录的目录, 我想找到哪个名称格式的目录具有日期:

p ** _ yyyymmdd

我可以编写一个命令,可以找到(通过名称而非时间戳),显示在shell脚本中具有最后日期(最高yyyy,然后是最高mm,然后是最高dd)的目录名吗?

在此处添加文件名示例:

p00_20131208 p00_20131220 p00_20140107 p01_20130324 

5 个答案:

答案 0 :(得分:3)

find . -type d -name 'p??_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' |
sort -t _ -k2nr |
head -1

答案 1 :(得分:1)

此脚本将找到名称以6位数字结尾的每个目录,并将它们放在文件tmp中。

在第二部分中,它从名称中提取日期(它获取最后6个字符,因此如果find返回的文件夹以./或./subfolder /的相对路径开始,则不会有问题。) / p>

最后,它会找到最新的日期并打印具有相应名称的文件夹。

#!/bin/bash
find . -type d | egrep "p.._[0-9]{6}" > tmp

date=$(for r in $(cat tmp)
do
    echo ${r: -6}
done | sort -nr | head -1)
cat tmp | grep $date

答案 2 :(得分:1)

假设没有多个目录具有相同的日期:

#!/bin/bash

IFS=$'\n'
unset newestDir
for currDir in `ls -1f`
do
    if [[ -d "$currDir" && "$currDir" =~ ^p.*_[0-9]{8}$ ]]; then
        if [[ ! "$newestDir" ]]; then
            newestDir=$currDir
        else
            newestDate=${newestDir:(-8)}
            currDate=${currDir:(-8)}
            if (( $currDate > $newestDate )); then
                newestDir=$currDir
            fi
        fi
    fi
done

echo $newestDir

答案 3 :(得分:1)

  

我有一个包含许多文件和目录的目录,

看起来你想在一个目录中执行此操作,然后才能执行此操作:

cd /my/directory

p1='p*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
printf "%s\n" $p1|sort -t_ -nk2|head -1

答案 4 :(得分:0)

尝试这样的事情:

find . -type d -name "p*" -exec ./process {} \; | sort > file

将以下内容保存为文件“process”并运行“chmod + x process”

#!/bin/bash
p=$1
yyyymmdd=${p#*_}    # Strip everything before underscore
y=${yyyymmdd:0:4}   # Extract 4 chars for year
m=${yyyymmdd:4:2}   # Extract 2 chars for month
d=${yyyymmdd:6:2}   # Extract 2 chars for day
echo $y $m $d $p

显然,您可以对文件进行不同的排序,并使用它做您喜欢的事情。