What is the command to remove all files but not directories?
What you're trying to do is recursive deletion. For that you need a recursive tool, such as find
.
find FOLDER -type f -delete
With bash
:
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
Here iterating over the glob expanded filenames, and removing only files.
The above is dry-run, if satisfied with the changes to be made, remove echo
for actual removal:
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
Finally, unset globstar
:
shopt -u globstar
With zsh
, leveraging glob qualifier:
echo -- FOLDER/**/*(.)
(.)
is glob qualifier, that limits the glob expansions to just regular files.
The above will just print the file names, for actual removal:
rm -- FOLDER/**/*(.)