用於從給定結構建立文件和資料夾的應用程式

用於從給定結構建立文件和資料夾的應用程式

我見過一個名為 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

尾部斜線表示「這是一個資料夾,而不是一個檔案」。然後您可以使用像這樣的簡單腳本來建立目錄結構。關於此腳本的一些警告。

  1. 必須先建立更高層級的目錄。
  2. 我前面加了一個“.”到路徑,因此建立的所有目錄都相對於運行腳本的目錄。
  3. 我沒有對 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將產生資料檔案中所述的目錄和檔案。

相關內容