我見過一個名為 Structurer 的 Mac 應用程式(這裡有一個視頻http://www.youtube.com/watch?v=kXRjneFTs6Q)它給出了這樣的文件和資料夾結構:
/folder1
/folder2
/file1
/folder2.1
/file2.1
將在現有位置建立此文件和資料夾。
Ubuntu 有類似的東西,或者我如何建立一個 shell 腳本來獲得這樣的東西?
如果可能的話,能夠使用模板建立文件也很酷。
答案1
棘手的部分是文件和資料夾以相同的方式顯示,並且沒有簡單的方法來區分它們。對於文件 2.1,沒有辦法判斷它 ( /folder2/folder2.1/file2.1
) 實際上是資料夾還是folder2.1 中的檔案。
是的,您的描述中提到了這個詞*file*
,所以我們知道您指的是文件,但是對於程式來說,它怎麼能告訴我們呢?程式可能會區分檔案和路徑,因為一個條目後面跟著另一個條目具有相同的縮排等級。但是,這會導致一系列複雜且令人困惑的規則。
我建議您使用關鍵字或僅使用完整限定名稱。最簡單的是:
/資料夾1/
/資料夾2/
/資料夾2/檔案1
/資料夾2/資料夾2.1/
/folder2/folder2.1/file2.1
尾部斜線表示「這是一個資料夾,而不是一個檔案」。然後您可以使用像這樣的簡單腳本來建立目錄結構。關於此腳本的一些警告。
- 必須先建立更高層級的目錄。
- 我前面加了一個“.”到路徑,因此建立的所有目錄都相對於運行腳本的目錄。
- 我沒有對 dir/path 檔案的內容進行錯誤檢查。
#!/bin/sh -v # # builds a directory and file structure. # directories must exists before referenced or file in the directory declared. # # sample input looks like (without the leading #): # /folder1/ # /folder2/ # /folder2/file1 # /folder2/folder2.1/ # /folder2/folder2.1/file2.1 # # make sure we have our one and only input parameter. if [ $# != 1 ]; then echo "Usage: `basename $0` input_file_name" echo "input_file_name contains absolute dir paths with a trailing slash," echo "or absolute file path/name with no trailing slash." exit 1 fi # get the file name from the command line FILE=$1 # make sure the input parameter specifies a file. if [ ! -e ${FILE} ]; then echo "Sorry, the file ${FILE} does not exist." exit 1 fi for LINE in $(cat $FILE) do LAST=$(echo ${LINE} | awk -F/ '{print $(NF)}') # if file ends with a slash, this value is blank, if it is no slash, this is the file name. if [ "${LAST}XXX" = "XXX" ]; then # is empty, so it is directory, future feature to check exist already mkdir ".${LINE}" else # is not empty, so it is a file touch ".${LINE}" fi done exit 0
這將建立輸入檔案中所示的目錄和檔案。如果呼叫該腳本create.sh
並且您已呼叫該腳本chmod 755 create.sh
,則該命令./create.sh data
將產生資料檔案中所述的目錄和檔案。