把文件、目录排序

回复 收藏

shell1.jpg

2017-01-11 13:46 举报
已邀请:
0

阿铭 管理员

赞同来自:

参考答案:

#!/bin/bash

file_rm ()

{

    if [ -f $1 ]

    then

        rm -f $1

    fi

}

print_f_name() {

for f_name in `cat $1 |awk '{print $2}'`

do

    l=`echo $f_name|wc -L`

    f_own=`stat -c %U $f_name`

    if [ $l -gt 8 ]

    then

        f_name=`echo ${f_name:0:8}-$f_own`

    fi

    echo $f_name

done

}

for f in dir file dir_time file_time  sort_d sort_f sort_d2 sort_f2 tmp

do

    file_rm /tmp/$f.txt

done

for f in `ls`; 

do 

    [ -d $f ] && echo $f >> /tmp/dir.txt

    [ -f $f ] && echo $f >> /tmp/file.txt

done

for d in `cat /tmp/dir.txt`

do

    d_t=`stat -c %X $d`

    echo $d_t $d >> /tmp/dir_time.txt

done

for file in `cat /tmp/file.txt`

do

    

    f_t=`stat -c %X $file` 

    echo $f_t $file >> /tmp/file_time.txt

done

sort -nr /tmp/dir_time.txt  > /tmp/sort_d.txt

sort -nr /tmp/file_time.txt > /tmp/sort_f.txt

print_f_name /tmp/sort_d.txt > /tmp/tmp.txt

print_f_name /tmp/sort_f.txt >> /tmp/tmp.txt

cat /tmp/tmp.txt |xargs |sed 's/ /,/g'

0

chiang1213

赞同来自:


#!/bin/bash
rm -rf /tmp/final.txt /tmp/date-dir /tmp/date-file
[[ ! $# -eq 1 ]] && exit 1
[[ ! -d $1 ]] && exit 1
find $1 -type d|egrep -v "^$1$"|xargs -i stat --printf="%U %x %n\n" {}|awk -F '[ \t/]' '{print $2 " " $NF " " $1}'|sort -r > /tmp/date-dir
find $1 -type f|egrep -v "^$1$"|xargs -i stat --printf="%U %x %n\n" {}|awk -F '[ \t/]' '{print $2 " " $NF " " $1}'|sort -r > /tmp/date-file
#cat /tmp/date-dir|awk '{print $1}'|uniq > /tmp/dir_date
#cat /tmp/file-dir|awk '{print $1}'|uniq > /tmp/file_date

IFS_old=$IFS
IFS=$'\n'
for ddate in `cat /tmp/date-dir|awk '{print $1}'|uniq`
do
 for dirline in `egrep "^$ddate" /tmp/date-dir|egrep -v egrep |sort -k 2`
do
dirname=`echo "$dirline"|awk '{print $2}'`
dirowner=`echo "$dirline"|awk '{print $3}'`
[ ${#dirname} -gt 8 ] && echo "${dirname:0:8}-$dirowner" >> /tmp/final.txt || echo $dirname >> /tmp/final.txt
done
done


for fdate in `cat /tmp/date-file|awk '{print $1}'|uniq`
do
 for fileline in `egrep "^$fdate" /tmp/date-file|egrep -v egrep |sort -k 2`
 do
 filename=`echo "$fileline"|awk '{print $2}'`
 fileowner=`echo "$fileline"|awk '{print $3}'`
 [ ${#filename} -gt 8 ] && echo "${filename:0:8}-$fileowner" >> /tmp/final.txt || echo "$filename" >> /tmp/final.txt
 done
done
cat /tmp/final.txt |tr "\n" " "
IFS=$IFS_old


0

济南-李聚章

赞同来自:

感觉本题的难点是如何获取文件或目录的访问时间,并且此访问时间可以数值比较。学习了stat -c %X 命令

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: