Para los clústeres reales no es una buena idea, utilizar ls. Si tiene derechos de administrador, , es más adecuado usar fsimage.
Modifico la secuencia de comandos de arriba para ilustrar la idea.
primero, ir a buscar fsimage
curl "http://localhost:50070/getimage?getimage=1&txid=latest" > img.dump
convertir a texto (misma salida que LSR da)
hdfs oiv -i img.dump -o fsimage.txt
Guión:
#!/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 de las soluciones anteriores fue parcialmente útiles. Podía escribir un script de shell para buscar y eliminar todos los directorios que coincidían con un patrón, pero lo que realmente necesitaba hacer era eliminar solo los que tenían más de N días. (http://stackoverflow.com/questions/7733096/hadoop-bash-delete-filenames-matching -range) – vid12