eloypnd / dotbox

A place to drop anything I might find useful, code wise.
MIT License
0 stars 0 forks source link

shell script: create folder per file, copy file and create `index.js` inside #3

Open eloypnd opened 6 years ago

eloypnd commented 6 years ago

Goal

In a React project I need to move from a flat structure based on components, documentation and test files in the component folders to one folder per component.

Script

for file in *;
  do folder=$(echo $file | sed 's/\.[A-Za-z0-9]*$//');
  mkdir "$folder";
  mv "$file" "$folder";
  echo "export { default } from '$folder';\n" > "$folder/index.js";
done
eloypnd commented 6 years ago

Create a test file for every component (folder) in the folder. Meant to be executed in src/components:

for folder in */;
  do name=$(echo $folder | sed 's/\/$//');
  echo -e "import React from 'react'\nimport renderer from 'react-test-renderer'\nimport $name from './$name'\n\nit('$name renders correctly', () => {\n  const tree = renderer\n    .create(<$name />)\n    .toJSON()\n  expect(tree).toMatchSnapshot()\n})\n" > "$name/$name.spec.js";
done
eloypnd commented 6 years ago

Create files from a array of strings:

declare -a names=("list" "of" "strings")

for name in "${names[@]}"
do
  echo "$name";
  echo -e "content for file $name\nnew line" > "path/to/$name.ext";
done
eloypnd commented 3 years ago

Create index file if it does not exist

#!/bin/bash

for file in *; do
    if [ -d "$file" ]; then
        if [[ ! -e $file/index.js ]]; then
            echo "export { default } from './$file';\n" > "$file/index.js";
        fi
    fi
done