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 -- '{}' +
.