#!/usr/bin/env bash ### # Script to clear all automatically generated PyCache files. # # When running code on an older/slower hard drive, it's possible to get errors about PyCache, when using PyTest. # It seems entirely arbitrary when they pop up, and the easiest way to fix it is just to delete the associated PyCache # files, so the project regenerates them. # # Thus, this script simply iterates through all sub folders and clears all found PyCache files. ## # Abort on error set -e # Color Output Variables. text_reset="\033[0m" text_blue="\033[0;34m" function main () { # Get absolute path of current folder. current_folder="$(cd "$(dirname "${1}")" && pwd)/$(basename "${1}")" # echo -e "${text_blue}Starting Directory: \"${current_folder}\"${text_reset}" # echo "" echo -e "${text_blue}Removing auto-generated files in PyCache directories...${text_reset}" # Start with current directory, which should be project root. Pass in absolute path as start point. iterate_dir ${current_folder} # echo "" echo -e "${text_blue}PyCache directories cleared.${text_reset}" } ### # Iterates through current dir, recursively checking for subdirectories and clearing any PyCache files. ## function iterate_dir () { # Parse variables. dir="$(cd "$(dirname "${1}")" && pwd)/$(basename "${1}")" dir_name=${dir##*/} # Change to indicated directory. cd ${1} # Check if PyCache directory. if [[ "${dir_name}" == "__pycache__" ]] then # Is PyCache directory. Check all files within. # echo " ${dir}" for file in "${dir}/"* do # Check if value is actually a file. if [[ -f "${file}" ]] then # Is file. Double check that is PyCache file. It should end in ".pyc". file_extension=${file##*.} if [[ "${file_extension}" == "pyc" ]] then # Is confirmed PyCache file. These are automatically generated so we can simply delete it. rm ${file} > /dev/null 2>&1 fi fi done fi # Check for any subdirectories. for sub_dir in "${dir}/"* do # Check if value is actually directory. if [[ -d ${sub_dir} ]] then # Recursively iterate on subdirectory. iterate_dir ${sub_dir} fi done cd .. } main