如何找到包含最后日期测试的目录



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

p ** _ yyyymmdd

我可以编写一个命令(通过名称而非时间戳),该命令显示在Shell脚本中具有最后日期的目录名称(最高Yyyy,然后是最高MM,然后是最高DD)?

在此处添加文件名示例:

p00_20131208 p00_20131220 p00_20140107 p01_20130324 
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

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

看起来您只想在一个目录中这样做,然后您要这样做:

cd /my/directory
p1='p*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
printf "%sn" $p1|sort -t_ -nk2|head -1

此脚本将找到每个名称以6位数字完成的目录,然后将它们放入文件tmp。

在第二部分中,它从名称中提取日期(它获得了最后6个字符,因此,如果查找返回的文件夹以./或./或././subfolder/)的相对路径的启动而不是问题。<<<<<<<<<<

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

#!/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

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

#!/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

尝试这样的东西:

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

保存以下作为文件"过程"并运行" 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

显然,您可以以不同的方式对文件进行排序,然后按照自己的意愿进行操作。

相关内容

  • 没有找到相关文章

最新更新