Приложение для создания файлов и папок по заданной структуре

Приложение для создания файлов и папок по заданной структуре

Я видел приложение для Mac под названием Structurer (вот видео)http://www.youtube.com/watch?v=kXRjneFTs6Q), который имеет следующую структуру файлов и папок:

/folder1
/folder2
  /file1
  /folder2.1
    /file2.1

создаст эти файлы и папки в существующем месте.

Есть ли что-то подобное для Ubuntu, или как мне создать скрипт оболочки, чтобы получить что-то подобное?

Если это возможно, было бы здорово также иметь возможность создавать файлы с использованием шаблонов.

решение1

Сложность в том, что у вас есть файлы и папки, показанные одинаково, и нет простого способа отличить их друг от друга. Для файла 2.1 нет способа узнать, является ли он ( /folder2/folder2.1/file2.1) на самом деле папкой или файлом в папке folder2.1.

Да, в вашем описании есть слово *file*, поэтому мы знаем, что вы имеете в виду файл, но как программа может это определить? Программа может отличить файлы от путей, потому что за одним из них следует другая запись на том же уровне отступа. НО это приводит к набору сложных и запутанных правил.

Я бы посоветовал вам использовать ключевое слово или просто полные квалифицированные имена. Самый простой:

/папка1/

/папка2/

/папка2/файл1

/папка2/папка2.1/

/папка2/папка2.1/файл2.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сгенерирует ваши каталоги и файлы, как описано в файле данных.

Связанный контент