Per i cluster reali non è una buona idea, usare ls. Se disponi dei diritti di amministratore, è più adatto per utilizzare fsimage.
Modifica lo script sopra per illustrare l'idea.
prima, fetch fsimage
curl "http://localhost:50070/getimage?getimage=1&txid=latest" > img.dump
convertirlo in un testo (stessa uscita LSR dà)
hdfs oiv -i img.dump -o fsimage.txt
Script:
#!/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
Una delle soluzioni precedenti è stato parzialmente utile. Potrei scrivere uno script di shell per trovare ed eliminare tutte le directory che corrispondono a un pattern, ma quello che dovevo veramente fare era cancellare solo quelli che erano più vecchi di N giorni. (http://stackoverflow.com/questions/7733096/hadoop-bash-delete-filenames-matching-range) – vid12