Linux:一道作業題

2020-08-08 14:23:06

指令碼:
1.在/qfedu目錄中批次建立10個檔案,檔名由10個隨機小寫字母+固定字元組成.固定字元 爲_html, 如:ahdkhzhdld_html。
2.將上述目錄中的檔案重新命名,將 html 換成 HTML。
3.僅保留上述目錄中最新的檔案,其它檔案都刪除掉。

感覺自己寫得太繁雜。。。

#!/bin/bash
#定義一個隨機生成10個字母的函數
function genLetters(){
    letters=qwertyuiopasdfghjklzxcvbnm
    name=
    for i in {1..10}
    do
        num=$[ $RANDOM%26 ]
        one_letters=${letters:$num:1} #變數切片
        name=$name$one_letters
    done
    echo $name
}

echo "正在建立檔案..."
sleep 2

#開始建立檔案
for j in {1..10}
do
    touch /qfedu/$(genLetters)_html
done
echo "檔案建立完畢!結果如下:"
ls /qfedu/          #直接展示第一步結果
sleep 5

echo "開始重新命名檔案...."
sleep 1

find /qfedu/ -name "*html" > /qfedu/oldname #將舊檔名寫入檔案
find /qfedu/ -name "*html"|sed 's/html/HTML/g' > /qfedu/newname  #將新檔名寫入檔案
#開始重新命名
for i in {1..10}
do
    #使用awk每次各讀取一個檔名
    old_name=`awk 'NR=='$i'{print $1}' /qfedu/oldname`
    new_name=`awk 'NR=='$i'{print $1}' /qfedu/newname`
    mv $old_name $new_name
done
echo "重新命名完畢!結果如下:"
ls  /qfedu/          #直接展示第二步結果
sleep 5

echo "正在刪除舊檔案..."
sleep 1

ls -l /qfedu/|awk 'NR!=1{print $NF}' >/tmp/all_file_name #將所有檔名寫入新的資料夾
total=`cat /tmp/all_file_name |wc -l` #統計一個有多少個檔案

newestFile=/qfedu/newname #這個是最新的檔案,因爲他在上面的回圈中最後被呼叫
for i in `seq 1 $total`
do
    file_name=/qfedu/`sed -n "${i}p" /tmp/all_file_name`  #逐個取出檔名
    test $file_name -ot $newestFile  #檢查是否比最新的檔案要舊
    result=`echo $?`   #如果返回0,則比最新的檔案要舊
    [ $result -eq 0 ]&& rm -rf $file_name && echo "已刪除$file_name"
done
echo "舊檔案刪除完畢!結果如下:"
ls /qfedu/          #直接展示第三步結果