15

I'd like to remove all directories from the pwd but leave the files in the pwd alone. If the content of my pwd is:

mydir1
mydir2
myfile1
myfile2

then I'd like to be left with just

myfile1
myfile2

I assume that I need to use rm -r -i

Am I correct?

8

No that would give you "missing operand" since you didn't specify anything. Putting a * would prompt also for files.

I'd give a try to:

find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

The mindepth 1 will exclude . from the results, the maxdepth 1 will exclude trying to do under the directories that will anyway get deleted (therefore creating a warning). But in practice you could leave them both out if you agree to have a few "innocent" warnings.

15

I found this one somewhere:

rm -r */

Seems the easiest way to go. With your example, you would have to confirm each case, if you have 5 files it's OK, but with bigger file structures an interactive mode is't the way to go... Just as a suggestion, if it's important information, make a backup...

  • 1
    That will also follow symbolic links, which very probably isn't desired here. – JdeBP Feb 7 '14 at 16:43
7

Use

rm -rf ./*/

That avoids interactive mode an deletes only directories in your local directory.

3

Something like this should work:

find /path -type d -exec rm -rf '{}' \;

-type d looks for only directories

-1
you can also try in this way to delete only all folders not files from any location in linux.

    #delete only all dir and don't touch files
    #!/bin/bash
    for dir in `ls -l | grep ^d | awk '{print $9}'`
    do
    echo "going to delete $dir " `rm -rf $dir`
    done
    ls

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.