Dla prawdziwych klastrów nie jest to dobry pomysł, aby użyć ls. Jeśli masz uprawnienia administratora, bardziej odpowiednie jest użycie fsimage.
Modyfikuję powyższy skrypt, aby zilustrować pomysł.
najpierw pobrać fsimage
curl "http://localhost:50070/getimage?getimage=1&txid=latest" > img.dump
przekonwertować go na tekst (taki sam efekt jak LSR daje)
hdfs oiv -i img.dump -o fsimage.txt
Scenariusz:
#!/bin/bash
usage="Usage: dir_diff.sh [days]"
if [ ! "$1" ]
then
echo $usage
exit 1
fi
now=$(date +%s)
curl "http://localhost:50070/getimage?getimage=1&txid=latest" > img.dump
hdfs oiv -i img.dump -o fsimage.txt
cat fsimage.txt | grep "^d" | while read f; do
dir_date=`echo $f | awk '{print $6}'`
difference=$((($now - $(date -d "$dir_date" +%s))/(24 * 60 * 60)))
if [ $difference -gt $1 ]; then
echo $f;
fi
done
Jednym z wcześniejszych rozwiązań było częściowo pomocne. Mógłbym napisać skrypt powłoki, aby znaleźć i usunąć wszystkie katalogi pasujące do wzorca, ale to, co naprawdę musiałem zrobić, to usunąć te, które były starsze niż N dni. (http://stackoverflow.com/questions/7733096/hadoop-bash-delete-filenames-matching-range) – vid12