我有一个包含许多文件和目录的目录, 我想找到哪个名称格式的目录具有日期:
p ** _ yyyymmdd
我可以编写一个命令,可以找到(通过名称而非时间戳),显示在shell脚本中具有最后日期(最高yyyy,然后是最高mm,然后是最高dd)的目录名吗?
在此处添加文件名示例:
p00_20131208 p00_20131220 p00_20140107 p01_20130324
答案 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
显然,您可以对文件进行不同的排序,并使用它做您喜欢的事情。