根据给定结构创建文件和文件夹的应用程序

根据给定结构创建文件和文件夹的应用程序

我见过一款名为 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) 实际上是文件夹还是文件夹 2.1 内的文件。

是的,您的描述中提到了这个词*file*,所以我们知道您指的是文件,但对于程序来说,它如何分辨呢?程序可能会将文件与路径区分开来,因为一个文件后面跟着另一个文件,缩进级别相同。但是,这会导致一组复杂而令人困惑的规则。

我建议你使用关键字或完全限定名称。最简单的方法是:

/文件夹1/

/文件夹2/

/文件夹2/文件1

/folder2/folder2.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将生成数据文件中所述的目录和文件。

相关内容