【操作系統作業—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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...