Created
March 29, 2021 18:00
-
-
Save nylander/beff8f66d3b5c30c6c3ec732688e5373 to your computer and use it in GitHub Desktop.
ptemplate - set up a project file hierarchy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# ptemplate - Create a project structure | |
# Usage: ptemplate myproject | |
# Last modified: Mon mar 29, 2021 07:55 | |
# Sign: Johan Nylander | |
# Description: Create a folder structure | |
# and, if git is available, initilize git- | |
# version control. No files in folder private | |
# is under git control, and only the README file | |
# in run/ and tmp/ are under git control. | |
# Example; | |
# | |
# myproject | |
# ├── README.md | |
# ├── data | |
# │ └── README.md | |
# ├── doc | |
# │ └── README.md | |
# ├── .git | |
# │ └── ... | |
# ├── .gitignore | |
# ├── metadata | |
# │ └── README.md | |
# ├── private | |
# │ ├── .gitignore | |
# │ └── README.md | |
# ├── results | |
# │ └── README.md | |
# ├── run | |
# │ ├── .gitignore | |
# │ └── README.md | |
# ├── src | |
# │ └── README.md | |
# └── tmp | |
# ├── .gitignore | |
# └── README.md | |
# | |
# Note: Minimal error checking! | |
if [ $# -eq 0 ] ; then | |
echo "Usage: $0 myproject" | |
exit 0 | |
fi | |
proj="$1" | |
projd=$(readlink -f "${proj}") | |
projdd=$(dirname "${projd}") | |
if [ -d "${proj}" ] ; then | |
echo "Error: Folder $proj exists." | |
exit 1 | |
else | |
mkdir -p "${proj}" | |
fi | |
dirs=(data doc metadata private results run src tmp) | |
nogitdirs=(run tmp private) | |
now=$(date) | |
cat << EOF > "${proj}"/README.md | |
# README for ${proj} | |
- Modified: ${now} | |
- Sign: $USER | |
## Description | |
EOF | |
for d in "${dirs[@]}" ; do | |
mkdir -p "${proj}/${d}" | |
cp "${proj}/README.md" "${proj}/${d}/" | |
sed -i "1 s/$/, ${d} folder/" "${proj}/${d}/README.md" | |
done | |
if command -v git &> /dev/null ; then | |
echo 'private/*' > "${proj}/.gitignore" | |
for d in "${nogitdirs[@]}" ; do | |
if [ -d "${proj}/${d}" ] ; then | |
echo '*' > "${proj}/${d}"/.gitignore | |
if [ ! "${d}" == "private" ] ; then | |
echo '!README.md' >> "${proj}/${d}"/.gitignore | |
fi | |
fi | |
done | |
cd "${projd}" || exit | |
git init &> /dev/null | |
git add --all &> /dev/null | |
git commit -m "first commit" &> /dev/null | |
git branch -M main &> /dev/null | |
cd "${projdd}" || exit | |
fi | |
if command -v tree &> /dev/null ; then | |
tree -L 2 -a "$proj" | |
fi | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment