скрипт использования диска файловой системы - PullRequest
0 голосов
/ 18 октября 2019

У меня есть сценарий меню с множественным выбором, чтобы отобразить верхнее использование диска файловой системы. Это рабочий скрипт, но у меня проблема с одной из файловых систем с именем /data.

DATA_RAW_DISK_DUMP="/tmp/$(basename $0).$$.disk_raw_data" 
DATA_RAW_FILE_LIST="/tmp/$(basename $0).$$.file_raw_data"

MY_WORKING_DIR=$(pwd)
MY_OUTPUT_FILE="MY_WORKING_DIR/$(basename $0).output"

#check existing output file
if [[ -e $MY_OUTPUT_FILE ]] ; then
        if [[ -e ${MY_OUTPUT_FILE}.old ]] ; then
                rm ${MY_OUTPUT_FILE}.old
        fi
        mv $MY_OUTPUT_FILE ${MY_OUTPUT_FILE}.old
fi

#will prompt for choices - ignore any arguments
echo "Please select from below:" cat<<EOF
1. /data
2. /data01
3. DO_ALL_DATA_AT_ONCE

Press ENTER to exit EOF

echo -n "Selection:" 
read ans
if [[ $ans == "" ]] ; then
        echo "Bye"
        exit 0
fi

case $ans in
        "1"|"2"|"3")
                FS_TARGET="$ans"
                ;;
        *)
                echo "Unknown option - quitting"
                echo "Bye"
                exit 0
                ;;
esac

DATA="/data0${FS_TARGET}/*"

if [[ $FS_TARGET -eq 3 ]] ; then
        #if the selection is 3, then we just do everything, in one go
        DATA="/data/* /data01/*"
fi

#do the du first
echo "Running du for ${DATA}, this will take a while, please wait..." >&2
du -sk ${DATA} > $DATA_RAW_DISK_DUMP 2>/dev/null

#we need to check each entry, if its directory, go into it and get the youngest file
echo "Checking file age for ${DATA}, this will take a while, please wait..." >&2
for i in $(cat $DATA_RAW_DISK_DUMP | awk '{print $2}') ; do
        if [[ -d $i ]] ; then
                #we need to find the youngest file in this directory tree
                YOUNGEST_FILE="$(find $i -type f -printf "%C@ %p\n" | sort -rn | head -n 1|sed 's,[0-9]*[.][0-9]*[ ],,g')"
                if [[ $YOUNGEST_FILE == "${i}" ]] ; then
                        stat --format "%n;%Y;%X;%U" "$i" >> $DATA_RAW_FILE_LIST 2>/dev/null
                elif [[ $YOUNGEST_FILE == "" ]] ; then
                        stat --format "%n;%Y;%X;%U" "$i" >> $DATA_RAW_FILE_LIST 2>/dev/null
                else
                        stat --format "%n;%Y;%X;%U" "$YOUNGEST_FILE" >> $DATA_RAW_FILE_LIST 2>/dev/null
                fi
        else
                stat --format "%n;%Y;%X;%U" "$i" >> $DATA_RAW_FILE_LIST 2>/dev/null
        fi
done

Сценарий выше, варианты 2 и 3 будут работать нормально, но вариант 1 ничего не показывает. Затем я пытаюсь по-другому, добавив еще одну переменную в скрипт, и это не сработало. Может кто-нибудь показать мне, как заставить его читать мою файловую систему / данные?

echo "Please select from below:"
cat<<EOF
1. /data
2. /data01
3. DO_ALL_DATA_AT_ONCE

Press ENTER to exit
EOF

echo -n "Selection:"
read ans
if [[ $ans == "" ]] ; then
        echo "Bye"
        exit 0
fi

case $ans in
        "1"|"2"|"3")
                FS_TARGET="$ans"
                ;;
        *)
                echo "Unknown option - quitting"
                echo "Bye"
                exit 0
                ;;
esac


DATA="/data0${FS_TARGET}/*"

if [[ $FS_TARGET -eq 1 ]] ; then
    #if the selection is 1, then change do the variable....
    DATA="/data/*"
fi

if [[ $FS_TARGET -eq 3 ]] ; then
    #if the selection is 3, then we just do everything, in one go
    DATA="/data/* /data01/*"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...