作業:我必須使用diff和sort以及使用ls -l,grep'^ d'和awk'{print $ 9}'的管道來創建shell腳本以打印完整的目錄樹。使用ls遞歸打印完整目錄樹的shell腳本
我寫了一個C程序來顯示我在找什麼。下面是輸出:
[email protected]:~/Documents/OS-Projects/Project5_DirectoryTree$ ./a.out
TestRoot/
[Folder1]
[FolderC]
[FolderB]
[FolderA]
[Folder2]
[FolderD]
[FolderF]
[FolderE]
[Folder3]
[FolderI]
[FolderG]
[FolderH]
我寫了這個至今:
ls -R -l $1 | grep '^d' | awk '{print $9}'
打印目錄樹,但現在我需要一種方法通過文件夾深度和可能的縮進,但不需要排序。有什麼建議麼?我無法使用find或tree命令。
編輯:最初的作業&限制被誤認爲並在以後的日期更改。如果您忽視限制,現在的答案是很好的解決方案,所以請將其留給任何有類似問題的人。至於任何人想知道的新任務。我將遞歸地打印所有子目錄,對它們進行排序,然後將它們與我的程序進行比較,以確保它們具有相似的結果。這裏是我的解決辦法:
#!/bin/bash
echo Program:
./a.out $1 | sort
echo Shell Script:
ls -R -l $1 | grep '^d' | awk '{print $9}' | sort
diff <(./a.out $1 | sort) <(ls -R -l $1 | grep '^d' | awk '{print $9}' | sort)
DIFF=$?
if [[ $DIFF -eq 0 ]]
then
echo "The outputs are similar!"
fi
當您使用awk時,您從不需要grep,因爲awk可以執行grep可以執行的任何操作(例如'grep'^ d'| awk'{print $ 9}''='awk'/^d/{print $ 9}''),遞歸查找目錄的工具是'find -type d',而不是'ls -R',這與diff或sort有什麼關係? –
我明白這一點。限制,差異和排序只是給定作業的一部分。如果可以的話,我會盡可能不同地寫腳本。 – Ryan
但是,你會比較什麼?你可以在腳本的某個地方拋出一個'diff/etc/password/dev/null>/dev/null'來使用'diff',我懷疑你是否會得到任何積分,但我無法想象你'd在這個問題中使用diff。 –