指定された構造からファイルとフォルダを作成するアプリ

指定された構造からファイルとフォルダを作成するアプリ

私は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実際にフォルダーなのか、フォルダー 2.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データ ファイルに記述されているとおりにディレクトリとファイルを生成します。

関連情報