#!/usr/bin/env bash #----------------------------------------------------------------------------- # █▀▀ ▄▀█ █▀ ▀█▀ █▀▀ █ █ █▀▀ █▀ # █▀ █▀█ ▄█ █ █▀ █ █▄▄ ██▄ ▄█ # # Usage: ff [path file or folder] # # Arguments: --help : prints usage info # -h : prints usage info # # Description: Bash script which is a combination of 'mkdir' and 'touch'. # It can create directory structures and files simultaneously. # # Dependencies: bash # # Examples: - Single file: # ff file # - Single directory: # ff dir/ # - Multiple files: # ff file1 file2 file3 # - Multiple directories: # ff dir1/ dir2/ dir3/ # - File in a directory # ff dir/file # - Directory in a directory # ff dir1/dir2/ # - Multiple files in multiple directories # ff dir1/dir2/file1 dir3/file2 # - If your shell supports brace expansion e.g bash, zsh, fish # ff dir1/{dir2/{file1,file2}.txt,dir3/file3.txt} #----------------------------------------------------------------------------- if [[ $# -eq 0 ]]; then echo "No arguments provided" echo "Usage: ff [path file or folder]" echo "For more information, run: ff --help" exit 1 fi if [[ "$1" == "--help" || "$1" == "-h" ]]; then echo "Usage: ff [path file or folder]" echo "Examples: - Single file: ff file - Single directory: ff dir/ - Multiple files: ff file1 file2 file3 - Multiple directories: ff dir1/ dir2/ dir3/ - File in a directory ff dir/file - Directory in a directory ff dir1/dir2/ - Multiple files in multiple directories ff dir1/dir2/file1 dir3/file2 - If your shell supports brace expansion e.g bash, zsh, fish ff dir1/{dir2/{file1,file2}.txt,dir3/file3.txt}" exit 0 fi for path in "$@"; do if [[ "$path" == */ ]]; then mkdir -p "$path" fi parent_dir=$(dirname "$path") if [[ -n "$parent_dir" ]] && [[ ! -d "$parent_dir" ]]; then mkdir -p "$parent_dir" fi touch "$path" done