असली समूहों के लिए यह एक अच्छा विचार, ls उपयोग करने के लिए नहीं है। यदि आपके पास व्यवस्थापकीय अधिकार हैं, यह fsimage का उपयोग करने के लिए अधिक उपयुक्त है।
मैं विचार को चित्रित करने के लिए ऊपर लिपि को संशोधित करता हूं।
पहले लाने fsimage
curl "http://localhost:50070/getimage?getimage=1&txid=latest" > img.dump
(के रूप में LSR देता है एक ही आउटपुट) यह पाठ में परिवर्तित
hdfs oiv -i img.dump -o fsimage.txt
स्क्रिप्ट:
#!/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
पहले समाधान में से एक आंशिक रूप से मददगार था। मैं एक पैटर्न से मेल खाने वाली सभी निर्देशिकाओं को ढूंढने और हटाने के लिए एक शेल स्क्रिप्ट लिख सकता था, लेकिन मुझे वास्तव में जो करना था वह केवल उन दिनों को हटा देता था जो एन दिनों से पुराने थे। (http://stackoverflow.com/questions/7733096/hadoop-bash-delete-filenames-matching-range) – vid12