【操作系統作業—lab1】linux shell腳本 遍歷目標文件夾和所有文件 | 包括特殊字元文件名的處理

来源:https://www.cnblogs.com/dallywang/archive/2019/03/06/10486287.html
-Advertisement-
Play Games

要求:寫一個linux bash腳本來查看目標文件夾下所有的file和directory,並且列印出他們的絕對路徑。 運行command:./myDir.sh input_path output_result 要求輸出格式為: 代碼思路: BFS遍歷,數據結構為queue,數組實現。 代碼實現: 寫 ...


要求:寫一個linux bash腳本來查看目標文件夾下所有的file和directory,並且列印出他們的絕對路徑。

運行command:./myDir.sh  input_path  output_result

要求輸出格式為

 

 

代碼思路:

BFS遍歷,數據結構為queue,數組實現。

代碼實現:

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")  #處理特殊字元文件名


queue[0]="head"
path_[0]=''
head_index=0  #head = the first inde - 1
tail_index=1  #tail=length  the last index + 1
head="null"
dir_count=0
file_count=0
path=``

#if the output directory is not exist, make a new directory
#處理目標文件所處地址不存在問題

out_path=$2
e_path=""
while [ ${out_path##*/} != ${out_path%%/*} ]
do
    dir_name=${out_path%%/*}
    if  [ ! -e $e_path""$dir_name ]
    then
        
        mkdir $e_path""$dir_name
    fi
    e_path=$e_path""$dir_name"/"
    out_path=${out_path#*/}
done
touch $2

#use queue to take BFS

function enQueue(){  #insert into tail
    queue[${tail_index}]=$1
    path_[${tail_index}]=$path"/"$1
    tail_index=$((${tail_index}+1))
}

function deQueue(){ #dequeue from head
    head_index=$((${head_index}+1))
    head=${queue[head_index]}
}

#start of this program
enQueue $1
while [ ${head_index} -ne $((${tail_index}-1)) ]
do
deQueue
path_[1]=`pwd`"/"$1
path=${path_[$head_index]}
echo "["${head}"]" >>$2

for var in  `ls ${path_[$head_index]}`
do
if [ -d $path"/""${var}" ]

then
dir_count=$((${dir_count}+1))
enQueue $var
fi
echo $path"/""${var}" >>$2
file_count=$((${file_count}+1))
done
echo "" >>$2
done

file_count=$((${file_count}-${dir_count}))
echo "[Directories Count]:"${dir_count} >>$2
echo "[Files Count]:"$file_count >>$2

IFS=$SAVEIFS

 

寫作業的時候遇到了很多小問題,因為自己也是剛剛纔接觸到shell,總結了一些解決方法,放在了另一篇隨筆里。

 




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 1. free查看記憶體使用量 2. 查看 /proc/meminfo 文件獲取物理記憶體信息 3. top命令獲取記憶體用量 1、 free查看記憶體用量命令 該命令是專門用於查看記憶體用量的專用命令,這個命令有很多參數,可以人性化的顯示記憶體的總量、使用量、剩餘量等信息。 (1) free的基本使用 ...
  • 下載安裝 1.從git官網下載一個git安裝包,官網下載地址http://www.git-scm.com/download/ 2.雙擊安裝程式,進入歡迎界面點擊【Next >】 3.閱讀協議,點擊【Next >】 4.選擇安裝位置,點擊【Next >】 5.選擇安裝組件:這裡可以使用預設選項,點擊【 ...
  • 1. 下載安裝git (windows版) 網址:https://git-scm.com/download/win 點擊for windows版本->下載 2. 點擊exe文件安裝,安裝完成後打開cmd,建立倉庫 3. 選擇一個盤創建一個文件夾隨意命名 如:E:\GIT 使用git init命令來初 ...
  • 利用系統函數模擬實現nginx 系統腳本啟動的特殊顏色專業效果/etc/init.d/nginxd {start/stop/restart/reload}利用if語句實現: 實現特殊顏色實現效果: vim start_nginx.sh 添加函數功能,實現上面的效果: vim bqh_nginx_st ...
  • 我們在寫腳本或用腳本時,往往會發現 > /dev/null 2>&1 這類的命令。之前都是簡單的瞭解一下,並沒有深度消化,直到自己寫腳本時,不認真寫成了2>&1 >/dev/null,導致結果出問題。下麵我通過網路給大家介紹一下: shell重定向介紹: 我們平時寫的腳本或啟動程式,某段代碼會處理外 ...
  • 今天,要安裝AD域控制器,運行dcpromo結果提示:在該 SKU 上不支持 Active Directory 域服務安裝嚮導。 以前弄的時候直接就通過了,這次咋回事?終於搞了大半天搞定了。 主要原因:我的Windows 2008 R2的版本是WEB版。不支持AD角色,只有DNS和IIS兩個角色,醉 ...
  • RedHat yum源配置 原本以為Redhat7 和Centos7是完全一樣的,可是安裝完Redhat7以後,使用yum安裝軟體,提示紅帽操作系統未註冊。在網上搜索教程,最後成功解決,解決方式是將yum源更改為網易的鏡像庫。 以下為解決方法: 1.首先卸載原來的yum源 參考網上教程,執行: rp ...
  • vim
    轉自:https://www.cnblogs.com/yangjig/p/6014198.html 在命令狀態下對當前行用== (連按=兩次), 或對多行用n==(n是自然數)表示自動縮進從當前行起的下麵n行。你可以試試把代碼縮進任意打亂再用n==排版,相當於一般IDE里的code format。使 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...