//delete_all_files
#!/usr/bin/env bash
set -euo pipefail
# delete_all_files.sh - Safe deletion utility for a directory
# Usage:
# ./delete_all_files.sh # interactive, deletes top-level files only
# ./delete_all_files.sh --all # interactive, deletes everything (recursive)
# ./delete_all_files.sh --yes --all # non-interactive, perform deletion
# ./delete_all_files.sh --dry-run --all # show actions without deleting
PWD_DIR="$(pwd -P)"
if [ "${PWD_DIR}" = "/" ] || [ "${PWD_DIR}" = "${HOME}" ]; then
echo "Refusing to run from ${PWD_DIR}. Run this in the target directory."
exit 1
fi
DELETE_MODE="files" # files or all
DRY_RUN=0
AUTO_YES=0
while [ $# -gt 0 ]; do
case "$1" in
--all) DELETE_MODE="all"; shift ;;
--files-only) DELETE_MODE="files"; shift ;;
--dry-run) DRY_RUN=1; shift ;;
--yes|-y) AUTO_YES=1; shift ;;
--help|-h) echo "Usage: $0 [--all|--files-only] [--dry-run] [--yes]"; exit 0 ;;
*) echo "Unknown option: $1"; echo "Use --help for usage"; exit 2 ;;
esac
done
echo "Target directory: ${PWD_DIR}"
if [ "${DELETE_MODE}" = "all" ]; then
echo "Mode: delete everything (recursive)"
else
echo "Mode: delete top-level files only"
fi
if [ "${DRY_RUN}" -eq 1 ]; then
echo "Dry run: no files will be removed"
fi
if [ "${AUTO_YES}" -eq 0 ]; then
echo "Listing items that would be removed:"
if [ "${DELETE_MODE}" = "all" ]; then
find . -mindepth 1 -maxdepth 3 -print
else
find . -maxdepth 1 -type f -print
fi
printf "\n"
read -p "Type 'yes' to proceed: " CONFIRM
if [ "${CONFIRM}" != "yes" ]; then
echo "Operation cancelled."
exit 0
fi
fi
if [ "${DRY_RUN}" -eq 1 ]; then
echo "Dry-run complete. No changes made."
exit 0
fi
# Perform deletion
if [ "${DELETE_MODE}" = "all" ]; then
echo "Deleting everything under ${PWD_DIR} ..."
find . -mindepth 1 -delete
else
echo "Deleting top-level files in ${PWD_DIR} ..."
find . -maxdepth 1 -type f -delete
fi
echo "Done."Ensure the directory needs to be included in any filename like code-delete.sh and use it wisely.
Now I'll run the new script in dry-run mode to verify it lists items without deleting anything. I'll run it with bash ... --dry-run so it doesn't require executable permission.
/[Full-Path]/delete_all_files.sh --dry-runHow it works
Options:
--all(recursive),--files-only(top-level files),--dry-run(show what would be removed),--yes(skip interactive confirmation).Safety: refuses to run from
/or your home directory; shows items before deletion.Default behavior: interactive, deletes top-level files only.
Run it
Make executable (optional):
chmod +x /[Full-Path]/delete_all_files.shDry-run (safe test):
bash /[Full-Path]/delete_all_files.sh --dry-run --allTo actually delete top-level files (interactive):
bash /[Full-Path]/delete_all_files.shTo actually delete everything without prompt:
bash /[Full-Path]/delete_all_files.sh --all --yes

