How can delete all files except one from a directory?
9,738
Solution 1
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
Solution 2
- move the file that you want to preserve to somewhere outside the directory
- remove everything in the directory using your favourite method
- move the file that you want to preserve back into the directory
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.
Author by
slhck
Updated on September 18, 2022Comments
-
slhck over 1 year
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?
-
Ignacio Vazquez-Abrams about 12 yearsAnd what about
not_defined
? -
DonCallisto about 12 years+1, you arrived just a second before me with find command :)
-
Admin about 12 years@DonCallisto, sorry, i don't know, next time i'll wait you :)
-
evilsoup almost 11 yearsDon't parse ls (this answer will specifically break on files with spaces in their names). you could use
printf %s\\n *
instead ofls
for more reliability (though that will still break on files with newlines in their names...) -
Konrad over 8 yearsIt's a good solution but how to avoid deleting system file like
./.DS_Store
? Also with respect to the-name non_delete_file
, in my case-name non_delete_file
is a directory. I would it to spare it as well as the content inside.