I need to delete all files, except one (its name is defined), from a given directory.
How can I do this from the terminal in OS X? Can I do this with one single command?
I need to delete all files, except one (its name is defined), from a given directory.
How can I do this from the terminal in OS X? Can I do this with one single command?
shopt -s extglob && rm !(non_delete_file)
or
rm -f !(non_delete_file)
or
find . ! -name non_delete_file -delete
Note that the above find command will work recursively -- it will delete all files and directories in the current directory, and in all subdirectories. If that is a problem, use -type f (to match only files) and -maxdepth 1 (to match things only in the current directory, ignoring subdirectories)
find . -type f -maxdepth 1 ! -name non_delete_file -delete
Not exactly 'hi-tech' but it is much harder to accidentally delete the file that you want to preserve if you use this approach.
Obviously, this approach fails if the file needs to continuously exist in the directory while all the carnage is happening.
Try
rm `ls | grep -v '^defined$'`
printf %s\\n * instead of ls for more reliability (though that will still break on files with newlines in their names...)
– evilsoup
Jul 31 '13 at 18:30
./.DS_Store? Also with respect to the-name non_delete_file, in my case-name non_delete_fileis a directory. I would it to spare it as well as the content inside. – Konrad Jan 19 '16 at 11:28