If a folder contains sub-folders and files, is there a Terminal command to remove some sub-folders while not removing any files?

If the folder structure is:

parentFolder
├── file1.rtf
├── file2.rtf
... #there are many more files.
├── moreFiles.rtf
├── subFolder1
├── subFolder2
├── subFolder3
... #there are many more subfolders.
└── moreSubFolders

How would I delete all subfolders except subFolder1 without deleting any of the files?

I do not want to have to name each folder which should be deleted.

I also do not want to have name each file which should not be deleted.

I want a command that only deletes folders, not files, and allows the user to exclude some folders from being deleted.


Rule-based deletions tend to be tricky and can easily go wrong. In your case the following might work

find "parentFolder" -depth 1 -type d ! -name subFolder1 -ok rm -r -- '{}' \;

This

  • only looks one level beneath parentFolder (-depth 1)
  • only looks at directories (-type d)
  • skips subFolder1 (! -name subFolder1)
  • prompts for the deletion of any non-skipped directories (-ok rm -r -- '{}' \;)

PS: To skip several directories use ! \( -name subFolder1 -o -name subFolder2 \), to delete without prompting use -exec rm -r -- '{}' +.