Here is a one-liner to find the time of the last access of any file under a directory in Linux:
date -d @`find PATH_TO_DIR -type f -exec stat -c %X '{}' \; | \
perl -ne 'use List::Util qw[min max]; BEGIN {$max=0;} chomp; $max = max($max,$_); END { print $max ."\n";}'`
Here's a bash script to do this on each file or directory underneath a specified directory:
#!/bin/bash
# use like:
# least_used_nodes.bash [PATH_TO_DIR]
#
# If PATH_TO_DIR is omitted, the current directory is used.
#
# leaf nodes with spaces in them are not supported
dir="."
if [ "$#" -ne 0 ] ; then
dir=$1
fi
declare -a access_times
for n in `\ls -1 $dir | egrep -v '^\.{1,2}\$'` ; do
echo "Analyzing $n"
d=`find $dir/$n -type f -exec stat -c %X '{}' \; |\
perl -ne 'use List::Util qw[min max]; BEGIN {$max=0;} chomp; $max = max($max,$_); END { print $max ."\n";}'`
#echo $d
access_times[$d]="${access_times[$d]} $n"
done
echo ""
echo ""
#echo ${access_times[@]}
echo "Printing access times youngest to oldest"
for d in `echo ${!access_times[@]} | sed -r 's/\\s+/\\n/g;' | sort -r` ; do
#echo $d
list=${access_times[$d]}
for n in $list ; do
echo `date -d @$d +"%Y.%m.%d %kh%Mm"` $n
done
done
No comments:
Post a Comment