I wrote a pretty simple bash script. It takes a directory with subdirectories with incremental prefixes in their names (01test, 02test, 03test
), creates a new directory with the next highest prefix and creates a couple of files and fills them with some default text.
I'd like to do this in fewer lines of code and eliminate redundancies.
#!/bin/bash
LAST=`exec ls example_dir | sed 's/\([0-9]\+\).*/1円/g' | sort -n | tail -1`
PREFIX="${LAST:0:2}"
PREFIX=$((PREFIX + 1))
PREFIX="$PREFIX"_
ARGS=$@
TESTNAME="${ARGS// /_}"
DIRNAME="example_dir/$PREFIX$TESTNAME"
mkdir $DIRNAME
mkdir $DIRNAME/some_directory
mkdir $DIRNAME/expected
touch $DIRNAME/first.txt
touch $DIRNAME/second.txt
touch $DIRNAME/third.json
echo "{" >> $DIRNAME/test.json
echo -e "\t\"enabled\": true" >> $DIRNAME/test.json
echo "}" >> $DIRNAME/test.json
echo "{" >> $DIRNAME/some_directory/$PREFIX.json
echo -e " \"entities\": [" >> $DIRNAME/some_directory/$PREFIX.json
echo " ]" >> $DIRNAME/some_directory/$PREFIX.json
echo "}" >> $DIRNAME/some_directory/$PREFIX.json
1 Answer 1
tail
must to read the whole file. Callingsort
with a-r
(aka--reverse
option) you can usehead
instead.touch
takes multiple arguments. You maytouch $DIRNAME/first.txt $DIRNAME/second.txt $DIRNAME/third.json
and further use brace expansion:
touch $DIRNAME/{first.txt,second.txt,third.json}
I would consider here-documenting the json files instead of echoing them, along the lines of:
cat << EOF >> $DIRNAME/test.json { "enabled": true } EOF
-
\$\begingroup\$ isn't there a
<
missing? I think it has to look like:cat << EOF >> $DIRNAME/test.json
\$\endgroup\$nath– nath2017年07月29日 20:45:41 +00:00Commented Jul 29, 2017 at 20:45