How to remove all files from a directory?
The closest I've gotten is
# rm /path/to/directory/*.*
but that doesn't work for files that don't have an extension...
command-line rm
add a comment |
The closest I've gotten is
# rm /path/to/directory/*.*
but that doesn't work for files that don't have an extension...
command-line rm
add a comment |
The closest I've gotten is
# rm /path/to/directory/*.*
but that doesn't work for files that don't have an extension...
command-line rm
The closest I've gotten is
# rm /path/to/directory/*.*
but that doesn't work for files that don't have an extension...
command-line rm
command-line rm
edited Nov 23 '14 at 6:48
αғsнιη
24.3k2295156
24.3k2295156
asked Sep 6 '11 at 7:58
user784637user784637
3,420133652
3,420133652
add a comment |
add a comment |
9 Answers
9
active
oldest
votes
Linux does not use extensions. It is up to the creator of the file to decide if he wants the name to have an extension. Linux looks at the 1st byte to figure out what kind of file it is dealing with.
To remove everything in a directory use:
rm /path/to/directory/*
You can use the -r
option, for example:
rm -r /path/to/directory/*
to also remove any sub directories (along with all their content) inside the directory you are removing the content of. Otherwise it will show an error informing you it is not removing the directory.
12
If you also want to delete hidden files runshopt -s dotglob
before runningrm (...)
– danjjl
Sep 6 '11 at 8:10
6
The * meansall files
;)*.*
means all files containing a.
somewhere in the name
– Rinzwind
Sep 6 '11 at 8:20
10
@Rinzwind, more accurately, the asterisk means "zero or more of any character". So*a*
means zero or more characters, followed bya
followed by zero or more characters. It would match the filenameshappy
,apple
,a
orla
.
– DisgruntledGoat
Sep 6 '11 at 13:43
6
@user784637 you are too easily impressed
– barlop
Sep 3 '14 at 16:10
1
Here's the command you want: rm -- *
– anon58192932
Oct 10 '14 at 21:04
|
show 5 more comments
To remove the folder with all its contents(including all interior folders):
rm -rf /path/to/directory
To remove all the contents of the folder(including all interior folders) but not the folder itself:
rm -rf /path/to/directory/*
or
rm -rf /path/to/directory/{*,.*}
if you want to make sure that hidden files/directories are also removed.
To remove all the "files" from inside a folder(not removing interior folders):
rm -f /path/to/directory/{*,.*}
Warning: if you have spaces in your path, make sure to always use quotes.
rm -rf /path/to the/directory/*
is equivalent to 2 separate
rm -rf
calls:
rm -rf /path/to
rm -rf the/directory/*
To avoid this issue, you can use
'
single-quotes'
(does not expand shell variables) or"
double-quotes"
(expands shell variables):
rm -rf "/path/to the/directory/"*
Where:
rm
- stands for "remove"
-f
- stands for "force" which is helpful when you don't want to be asked/prompted if you want to remove an archive, for example.
-r
- stands for "recursive" which means that you want to go recursively down every folder and remove everything.
8
I found this to be the more comprehensive and helpful answer, over and above the answer that was marked as Accepted.
– inspirednz
Aug 20 '16 at 1:58
2
rm -rf /path/to/directory/*
does not remove a hidden file in the folder e.g..htaccess
. Mayberm -rf /path/to/directory/.
? Haven't tried it.
– Mark Berry
Mar 29 '17 at 1:33
@MarkBerry rm -rf /path/to/directory/.*
– Lilian A. Moraru
Mar 29 '17 at 14:57
@LilianA.Moraru, I did some testing today.rm -rf /path/to/directory/.*
only deletes the hidden file(s) in the specified directory. Looking at the @danjjl's comment on @Rinzwind's answer, to also delete hidden files, runshopt -s dotglob
before runningrm -rf /path/to/directory/*
.
– Mark Berry
Mar 29 '17 at 22:59
CAUTION:rm -rf /path/to/directory/.*
on my system caused deletion of items in/path/to
. Fortunately, I had just backed-up my entire data to a separate disk. Needless to say, do NOT issue the commandrm -rf /path/to/directory/.*
unless you have backed up your whole computer to a separate / secure location!
– lawlist
Sep 3 '18 at 18:32
|
show 2 more comments
To remove all files in directory (including hidden files and subdirectories) run:
rm -rf /path/to/directory/{*,.*}
This should be the beautiful accepted answer. Thank you!
– Nam G VU
Sep 22 '16 at 15:53
3
Doesn't this glob match "." and ".." too?
– hertzsprung
Jan 8 '17 at 13:28
3
@hertzsprung - it does, and it will give you a warning that it cannot delete./
and../
, but it will still delete the hidden files.
– Ryan Wheale
Jan 31 '17 at 21:12
This does not work on Mac console, hidden files are still there with that command line.
– agapitocandemor
Aug 21 '18 at 8:36
add a comment |
If you want to delete only files in /path/to/directory you can do
find /path/to/directory -type f -print0| xargs -0 rm
or
find /path/to/directory -type f -exec rm '{}' ;
You can do loads with find
, the advantage is you can list what is found without piping it to rm
so you can see what will be deleted before you start.
2
GNU find
as a-delete
predicate. If you still want to use-exec
, substituting;
with+
will gatherrm
calls together, increasing efficiency.
– enzotib
Sep 6 '11 at 12:19
1
large amount of files with '+' will cause problems, since list will be too large, same as rm -f *. and when removing large amounts of files from same folder (talking in millons) both of them are not good :) In the end C++ came along and removed files in order of inodes in dir-tree.
– Osis
Sep 6 '11 at 12:53
3
You really ought to add a -- after the rm. Without that if you have a file names -rf or similar will be interpreted as arguments to rm. e.g. xargs -0 rm -- or -exec rm -- {} ;
– Richm
Sep 6 '11 at 13:52
you can also provide the -n argument to xargs. That will cause it to split the rm commands to having a maximum number of arguments i.e. 'xargs -n 100 -0 rm --' will remove files in chunks of 100.
– Richm
Sep 6 '11 at 13:54
You can also add -maxdepth 1 to ensure that find does not return files from any subdirectories. i.e. find /path/to/directory -maxdepth 1 -type f
– Richm
Sep 6 '11 at 14:10
add a comment |
If you also want to remove all subdirectories and the directory itself, you can use rm -rf /path/to/directory
. But always double-check your line before pressing return, rm -rf
can cause lots of havock as well, e.g. if you accidentally insert a space after the first slash while having superuser permissions...
add a comment |
To delete all files and directories(including the hidden ones) in a directory, you can try the following:
delete the folder, then recreate it
rm -rf dir_name && mkdir dir_name
use
find
find dir_name -mindepth 1 -delete
Here we specify -mindepth 1
to exclude the directory dir_name itself.
Take a look at the following link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Thanks for your advice and I've added more explanation for the links.
– zeekvfu
Nov 28 '13 at 5:04
2
Be careful, since deleting and re-creating the folder might result in different/wrong permissions for this folder!
– einjohn
Aug 29 '15 at 12:20
add a comment |
You can cd
into the directory and then run the command rm *.*
just like in DOS if you remember.
1
DOS is DEL for files and RMDIR for emptied directories- and hidden and system files must have those ATTRIB attributes removed first. Not nearly as simple ;)
– Eric
Jun 10 '15 at 13:03
add a comment |
To delete current directory, you could for example use rm -d ./*
-d tells to delete directories as well.
add a comment |
Since this question is constantly at the top of Google when I search for this myself:
The other answers suffer from different problems:
Some of them include
.
and..
which is noisy, confusing, and annoying.Some of them forget hidden files (files beginning with a dot).
They don't delete in a correct (deepest-first) order to allow directory deletion.
They descend into other (mounted) file systems, which is often undesired.
They're difficult to extend properly with extra parameters (more on that below).
So, to RECURSIVELY delete all files AND folders in a directory, do this:
find "${DIR}" -xdev -mindepth 1 -printf "%dt%yt%p" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Note that I added an -xdev
argument to prevent descending into mounts (like /proc
etc.).
Why not -depth
or -delete
?
Despite people constantly downvoting me for this, those methods have a downside: it doesn't seem like they're extensible enough to allow -prune
ing a subdirectory (without introducing more problems). By contrast with this method, you could insert
-not ( -path "${DIR}/subdir" -prune )
before the -mindepth
argument to exclude subdir
from having its contents deleted.
And for depth-first order, there's a-depth
flag infind
for that.
– Sergiy Kolodyazhnyy
May 21 '18 at 1:36
Uh... why not just use-delete
withfind
?-delete
is depth-first. You're already assuming non-POSIXfind
with the-printf
, so you might just as well use-delete
or-depth -print0 | xargs -0 rm
– muru
May 21 '18 at 6:41
@muru: Because I didn't know better... I'll change it.
– Mehrdad
May 21 '18 at 6:47
@muru: Actually, it seems your method doesn't work with-not ( -path "$DIR/subdir" )
... but mine does? Why?
– Mehrdad
May 21 '18 at 7:00
@Mehrdad what is that supposed to do?
– muru
May 21 '18 at 7:06
|
show 9 more comments
protected by αғsнιη May 21 '18 at 3:04
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
9 Answers
9
active
oldest
votes
9 Answers
9
active
oldest
votes
active
oldest
votes
active
oldest
votes
Linux does not use extensions. It is up to the creator of the file to decide if he wants the name to have an extension. Linux looks at the 1st byte to figure out what kind of file it is dealing with.
To remove everything in a directory use:
rm /path/to/directory/*
You can use the -r
option, for example:
rm -r /path/to/directory/*
to also remove any sub directories (along with all their content) inside the directory you are removing the content of. Otherwise it will show an error informing you it is not removing the directory.
12
If you also want to delete hidden files runshopt -s dotglob
before runningrm (...)
– danjjl
Sep 6 '11 at 8:10
6
The * meansall files
;)*.*
means all files containing a.
somewhere in the name
– Rinzwind
Sep 6 '11 at 8:20
10
@Rinzwind, more accurately, the asterisk means "zero or more of any character". So*a*
means zero or more characters, followed bya
followed by zero or more characters. It would match the filenameshappy
,apple
,a
orla
.
– DisgruntledGoat
Sep 6 '11 at 13:43
6
@user784637 you are too easily impressed
– barlop
Sep 3 '14 at 16:10
1
Here's the command you want: rm -- *
– anon58192932
Oct 10 '14 at 21:04
|
show 5 more comments
Linux does not use extensions. It is up to the creator of the file to decide if he wants the name to have an extension. Linux looks at the 1st byte to figure out what kind of file it is dealing with.
To remove everything in a directory use:
rm /path/to/directory/*
You can use the -r
option, for example:
rm -r /path/to/directory/*
to also remove any sub directories (along with all their content) inside the directory you are removing the content of. Otherwise it will show an error informing you it is not removing the directory.
12
If you also want to delete hidden files runshopt -s dotglob
before runningrm (...)
– danjjl
Sep 6 '11 at 8:10
6
The * meansall files
;)*.*
means all files containing a.
somewhere in the name
– Rinzwind
Sep 6 '11 at 8:20
10
@Rinzwind, more accurately, the asterisk means "zero or more of any character". So*a*
means zero or more characters, followed bya
followed by zero or more characters. It would match the filenameshappy
,apple
,a
orla
.
– DisgruntledGoat
Sep 6 '11 at 13:43
6
@user784637 you are too easily impressed
– barlop
Sep 3 '14 at 16:10
1
Here's the command you want: rm -- *
– anon58192932
Oct 10 '14 at 21:04
|
show 5 more comments
Linux does not use extensions. It is up to the creator of the file to decide if he wants the name to have an extension. Linux looks at the 1st byte to figure out what kind of file it is dealing with.
To remove everything in a directory use:
rm /path/to/directory/*
You can use the -r
option, for example:
rm -r /path/to/directory/*
to also remove any sub directories (along with all their content) inside the directory you are removing the content of. Otherwise it will show an error informing you it is not removing the directory.
Linux does not use extensions. It is up to the creator of the file to decide if he wants the name to have an extension. Linux looks at the 1st byte to figure out what kind of file it is dealing with.
To remove everything in a directory use:
rm /path/to/directory/*
You can use the -r
option, for example:
rm -r /path/to/directory/*
to also remove any sub directories (along with all their content) inside the directory you are removing the content of. Otherwise it will show an error informing you it is not removing the directory.
edited Sep 8 '18 at 13:55
Guy Avraham
1136
1136
answered Sep 6 '11 at 8:06
RinzwindRinzwind
204k28389524
204k28389524
12
If you also want to delete hidden files runshopt -s dotglob
before runningrm (...)
– danjjl
Sep 6 '11 at 8:10
6
The * meansall files
;)*.*
means all files containing a.
somewhere in the name
– Rinzwind
Sep 6 '11 at 8:20
10
@Rinzwind, more accurately, the asterisk means "zero or more of any character". So*a*
means zero or more characters, followed bya
followed by zero or more characters. It would match the filenameshappy
,apple
,a
orla
.
– DisgruntledGoat
Sep 6 '11 at 13:43
6
@user784637 you are too easily impressed
– barlop
Sep 3 '14 at 16:10
1
Here's the command you want: rm -- *
– anon58192932
Oct 10 '14 at 21:04
|
show 5 more comments
12
If you also want to delete hidden files runshopt -s dotglob
before runningrm (...)
– danjjl
Sep 6 '11 at 8:10
6
The * meansall files
;)*.*
means all files containing a.
somewhere in the name
– Rinzwind
Sep 6 '11 at 8:20
10
@Rinzwind, more accurately, the asterisk means "zero or more of any character". So*a*
means zero or more characters, followed bya
followed by zero or more characters. It would match the filenameshappy
,apple
,a
orla
.
– DisgruntledGoat
Sep 6 '11 at 13:43
6
@user784637 you are too easily impressed
– barlop
Sep 3 '14 at 16:10
1
Here's the command you want: rm -- *
– anon58192932
Oct 10 '14 at 21:04
12
12
If you also want to delete hidden files run
shopt -s dotglob
before running rm (...)
– danjjl
Sep 6 '11 at 8:10
If you also want to delete hidden files run
shopt -s dotglob
before running rm (...)
– danjjl
Sep 6 '11 at 8:10
6
6
The * means
all files
;) *.*
means all files containing a .
somewhere in the name– Rinzwind
Sep 6 '11 at 8:20
The * means
all files
;) *.*
means all files containing a .
somewhere in the name– Rinzwind
Sep 6 '11 at 8:20
10
10
@Rinzwind, more accurately, the asterisk means "zero or more of any character". So
*a*
means zero or more characters, followed by a
followed by zero or more characters. It would match the filenames happy
, apple
, a
or la
.– DisgruntledGoat
Sep 6 '11 at 13:43
@Rinzwind, more accurately, the asterisk means "zero or more of any character". So
*a*
means zero or more characters, followed by a
followed by zero or more characters. It would match the filenames happy
, apple
, a
or la
.– DisgruntledGoat
Sep 6 '11 at 13:43
6
6
@user784637 you are too easily impressed
– barlop
Sep 3 '14 at 16:10
@user784637 you are too easily impressed
– barlop
Sep 3 '14 at 16:10
1
1
Here's the command you want: rm -- *
– anon58192932
Oct 10 '14 at 21:04
Here's the command you want: rm -- *
– anon58192932
Oct 10 '14 at 21:04
|
show 5 more comments
To remove the folder with all its contents(including all interior folders):
rm -rf /path/to/directory
To remove all the contents of the folder(including all interior folders) but not the folder itself:
rm -rf /path/to/directory/*
or
rm -rf /path/to/directory/{*,.*}
if you want to make sure that hidden files/directories are also removed.
To remove all the "files" from inside a folder(not removing interior folders):
rm -f /path/to/directory/{*,.*}
Warning: if you have spaces in your path, make sure to always use quotes.
rm -rf /path/to the/directory/*
is equivalent to 2 separate
rm -rf
calls:
rm -rf /path/to
rm -rf the/directory/*
To avoid this issue, you can use
'
single-quotes'
(does not expand shell variables) or"
double-quotes"
(expands shell variables):
rm -rf "/path/to the/directory/"*
Where:
rm
- stands for "remove"
-f
- stands for "force" which is helpful when you don't want to be asked/prompted if you want to remove an archive, for example.
-r
- stands for "recursive" which means that you want to go recursively down every folder and remove everything.
8
I found this to be the more comprehensive and helpful answer, over and above the answer that was marked as Accepted.
– inspirednz
Aug 20 '16 at 1:58
2
rm -rf /path/to/directory/*
does not remove a hidden file in the folder e.g..htaccess
. Mayberm -rf /path/to/directory/.
? Haven't tried it.
– Mark Berry
Mar 29 '17 at 1:33
@MarkBerry rm -rf /path/to/directory/.*
– Lilian A. Moraru
Mar 29 '17 at 14:57
@LilianA.Moraru, I did some testing today.rm -rf /path/to/directory/.*
only deletes the hidden file(s) in the specified directory. Looking at the @danjjl's comment on @Rinzwind's answer, to also delete hidden files, runshopt -s dotglob
before runningrm -rf /path/to/directory/*
.
– Mark Berry
Mar 29 '17 at 22:59
CAUTION:rm -rf /path/to/directory/.*
on my system caused deletion of items in/path/to
. Fortunately, I had just backed-up my entire data to a separate disk. Needless to say, do NOT issue the commandrm -rf /path/to/directory/.*
unless you have backed up your whole computer to a separate / secure location!
– lawlist
Sep 3 '18 at 18:32
|
show 2 more comments
To remove the folder with all its contents(including all interior folders):
rm -rf /path/to/directory
To remove all the contents of the folder(including all interior folders) but not the folder itself:
rm -rf /path/to/directory/*
or
rm -rf /path/to/directory/{*,.*}
if you want to make sure that hidden files/directories are also removed.
To remove all the "files" from inside a folder(not removing interior folders):
rm -f /path/to/directory/{*,.*}
Warning: if you have spaces in your path, make sure to always use quotes.
rm -rf /path/to the/directory/*
is equivalent to 2 separate
rm -rf
calls:
rm -rf /path/to
rm -rf the/directory/*
To avoid this issue, you can use
'
single-quotes'
(does not expand shell variables) or"
double-quotes"
(expands shell variables):
rm -rf "/path/to the/directory/"*
Where:
rm
- stands for "remove"
-f
- stands for "force" which is helpful when you don't want to be asked/prompted if you want to remove an archive, for example.
-r
- stands for "recursive" which means that you want to go recursively down every folder and remove everything.
8
I found this to be the more comprehensive and helpful answer, over and above the answer that was marked as Accepted.
– inspirednz
Aug 20 '16 at 1:58
2
rm -rf /path/to/directory/*
does not remove a hidden file in the folder e.g..htaccess
. Mayberm -rf /path/to/directory/.
? Haven't tried it.
– Mark Berry
Mar 29 '17 at 1:33
@MarkBerry rm -rf /path/to/directory/.*
– Lilian A. Moraru
Mar 29 '17 at 14:57
@LilianA.Moraru, I did some testing today.rm -rf /path/to/directory/.*
only deletes the hidden file(s) in the specified directory. Looking at the @danjjl's comment on @Rinzwind's answer, to also delete hidden files, runshopt -s dotglob
before runningrm -rf /path/to/directory/*
.
– Mark Berry
Mar 29 '17 at 22:59
CAUTION:rm -rf /path/to/directory/.*
on my system caused deletion of items in/path/to
. Fortunately, I had just backed-up my entire data to a separate disk. Needless to say, do NOT issue the commandrm -rf /path/to/directory/.*
unless you have backed up your whole computer to a separate / secure location!
– lawlist
Sep 3 '18 at 18:32
|
show 2 more comments
To remove the folder with all its contents(including all interior folders):
rm -rf /path/to/directory
To remove all the contents of the folder(including all interior folders) but not the folder itself:
rm -rf /path/to/directory/*
or
rm -rf /path/to/directory/{*,.*}
if you want to make sure that hidden files/directories are also removed.
To remove all the "files" from inside a folder(not removing interior folders):
rm -f /path/to/directory/{*,.*}
Warning: if you have spaces in your path, make sure to always use quotes.
rm -rf /path/to the/directory/*
is equivalent to 2 separate
rm -rf
calls:
rm -rf /path/to
rm -rf the/directory/*
To avoid this issue, you can use
'
single-quotes'
(does not expand shell variables) or"
double-quotes"
(expands shell variables):
rm -rf "/path/to the/directory/"*
Where:
rm
- stands for "remove"
-f
- stands for "force" which is helpful when you don't want to be asked/prompted if you want to remove an archive, for example.
-r
- stands for "recursive" which means that you want to go recursively down every folder and remove everything.
To remove the folder with all its contents(including all interior folders):
rm -rf /path/to/directory
To remove all the contents of the folder(including all interior folders) but not the folder itself:
rm -rf /path/to/directory/*
or
rm -rf /path/to/directory/{*,.*}
if you want to make sure that hidden files/directories are also removed.
To remove all the "files" from inside a folder(not removing interior folders):
rm -f /path/to/directory/{*,.*}
Warning: if you have spaces in your path, make sure to always use quotes.
rm -rf /path/to the/directory/*
is equivalent to 2 separate
rm -rf
calls:
rm -rf /path/to
rm -rf the/directory/*
To avoid this issue, you can use
'
single-quotes'
(does not expand shell variables) or"
double-quotes"
(expands shell variables):
rm -rf "/path/to the/directory/"*
Where:
rm
- stands for "remove"
-f
- stands for "force" which is helpful when you don't want to be asked/prompted if you want to remove an archive, for example.
-r
- stands for "recursive" which means that you want to go recursively down every folder and remove everything.
edited Dec 21 '18 at 8:05
answered Sep 7 '11 at 17:26
Lilian A. MoraruLilian A. Moraru
4,16421919
4,16421919
8
I found this to be the more comprehensive and helpful answer, over and above the answer that was marked as Accepted.
– inspirednz
Aug 20 '16 at 1:58
2
rm -rf /path/to/directory/*
does not remove a hidden file in the folder e.g..htaccess
. Mayberm -rf /path/to/directory/.
? Haven't tried it.
– Mark Berry
Mar 29 '17 at 1:33
@MarkBerry rm -rf /path/to/directory/.*
– Lilian A. Moraru
Mar 29 '17 at 14:57
@LilianA.Moraru, I did some testing today.rm -rf /path/to/directory/.*
only deletes the hidden file(s) in the specified directory. Looking at the @danjjl's comment on @Rinzwind's answer, to also delete hidden files, runshopt -s dotglob
before runningrm -rf /path/to/directory/*
.
– Mark Berry
Mar 29 '17 at 22:59
CAUTION:rm -rf /path/to/directory/.*
on my system caused deletion of items in/path/to
. Fortunately, I had just backed-up my entire data to a separate disk. Needless to say, do NOT issue the commandrm -rf /path/to/directory/.*
unless you have backed up your whole computer to a separate / secure location!
– lawlist
Sep 3 '18 at 18:32
|
show 2 more comments
8
I found this to be the more comprehensive and helpful answer, over and above the answer that was marked as Accepted.
– inspirednz
Aug 20 '16 at 1:58
2
rm -rf /path/to/directory/*
does not remove a hidden file in the folder e.g..htaccess
. Mayberm -rf /path/to/directory/.
? Haven't tried it.
– Mark Berry
Mar 29 '17 at 1:33
@MarkBerry rm -rf /path/to/directory/.*
– Lilian A. Moraru
Mar 29 '17 at 14:57
@LilianA.Moraru, I did some testing today.rm -rf /path/to/directory/.*
only deletes the hidden file(s) in the specified directory. Looking at the @danjjl's comment on @Rinzwind's answer, to also delete hidden files, runshopt -s dotglob
before runningrm -rf /path/to/directory/*
.
– Mark Berry
Mar 29 '17 at 22:59
CAUTION:rm -rf /path/to/directory/.*
on my system caused deletion of items in/path/to
. Fortunately, I had just backed-up my entire data to a separate disk. Needless to say, do NOT issue the commandrm -rf /path/to/directory/.*
unless you have backed up your whole computer to a separate / secure location!
– lawlist
Sep 3 '18 at 18:32
8
8
I found this to be the more comprehensive and helpful answer, over and above the answer that was marked as Accepted.
– inspirednz
Aug 20 '16 at 1:58
I found this to be the more comprehensive and helpful answer, over and above the answer that was marked as Accepted.
– inspirednz
Aug 20 '16 at 1:58
2
2
rm -rf /path/to/directory/*
does not remove a hidden file in the folder e.g. .htaccess
. Maybe rm -rf /path/to/directory/.
? Haven't tried it.– Mark Berry
Mar 29 '17 at 1:33
rm -rf /path/to/directory/*
does not remove a hidden file in the folder e.g. .htaccess
. Maybe rm -rf /path/to/directory/.
? Haven't tried it.– Mark Berry
Mar 29 '17 at 1:33
@MarkBerry rm -rf /path/to/directory/.*
– Lilian A. Moraru
Mar 29 '17 at 14:57
@MarkBerry rm -rf /path/to/directory/.*
– Lilian A. Moraru
Mar 29 '17 at 14:57
@LilianA.Moraru, I did some testing today.
rm -rf /path/to/directory/.*
only deletes the hidden file(s) in the specified directory. Looking at the @danjjl's comment on @Rinzwind's answer, to also delete hidden files, run shopt -s dotglob
before running rm -rf /path/to/directory/*
.– Mark Berry
Mar 29 '17 at 22:59
@LilianA.Moraru, I did some testing today.
rm -rf /path/to/directory/.*
only deletes the hidden file(s) in the specified directory. Looking at the @danjjl's comment on @Rinzwind's answer, to also delete hidden files, run shopt -s dotglob
before running rm -rf /path/to/directory/*
.– Mark Berry
Mar 29 '17 at 22:59
CAUTION:
rm -rf /path/to/directory/.*
on my system caused deletion of items in /path/to
. Fortunately, I had just backed-up my entire data to a separate disk. Needless to say, do NOT issue the command rm -rf /path/to/directory/.*
unless you have backed up your whole computer to a separate / secure location!– lawlist
Sep 3 '18 at 18:32
CAUTION:
rm -rf /path/to/directory/.*
on my system caused deletion of items in /path/to
. Fortunately, I had just backed-up my entire data to a separate disk. Needless to say, do NOT issue the command rm -rf /path/to/directory/.*
unless you have backed up your whole computer to a separate / secure location!– lawlist
Sep 3 '18 at 18:32
|
show 2 more comments
To remove all files in directory (including hidden files and subdirectories) run:
rm -rf /path/to/directory/{*,.*}
This should be the beautiful accepted answer. Thank you!
– Nam G VU
Sep 22 '16 at 15:53
3
Doesn't this glob match "." and ".." too?
– hertzsprung
Jan 8 '17 at 13:28
3
@hertzsprung - it does, and it will give you a warning that it cannot delete./
and../
, but it will still delete the hidden files.
– Ryan Wheale
Jan 31 '17 at 21:12
This does not work on Mac console, hidden files are still there with that command line.
– agapitocandemor
Aug 21 '18 at 8:36
add a comment |
To remove all files in directory (including hidden files and subdirectories) run:
rm -rf /path/to/directory/{*,.*}
This should be the beautiful accepted answer. Thank you!
– Nam G VU
Sep 22 '16 at 15:53
3
Doesn't this glob match "." and ".." too?
– hertzsprung
Jan 8 '17 at 13:28
3
@hertzsprung - it does, and it will give you a warning that it cannot delete./
and../
, but it will still delete the hidden files.
– Ryan Wheale
Jan 31 '17 at 21:12
This does not work on Mac console, hidden files are still there with that command line.
– agapitocandemor
Aug 21 '18 at 8:36
add a comment |
To remove all files in directory (including hidden files and subdirectories) run:
rm -rf /path/to/directory/{*,.*}
To remove all files in directory (including hidden files and subdirectories) run:
rm -rf /path/to/directory/{*,.*}
answered Nov 23 '14 at 9:38
Leonid V. FedorenchikLeonid V. Fedorenchik
586510
586510
This should be the beautiful accepted answer. Thank you!
– Nam G VU
Sep 22 '16 at 15:53
3
Doesn't this glob match "." and ".." too?
– hertzsprung
Jan 8 '17 at 13:28
3
@hertzsprung - it does, and it will give you a warning that it cannot delete./
and../
, but it will still delete the hidden files.
– Ryan Wheale
Jan 31 '17 at 21:12
This does not work on Mac console, hidden files are still there with that command line.
– agapitocandemor
Aug 21 '18 at 8:36
add a comment |
This should be the beautiful accepted answer. Thank you!
– Nam G VU
Sep 22 '16 at 15:53
3
Doesn't this glob match "." and ".." too?
– hertzsprung
Jan 8 '17 at 13:28
3
@hertzsprung - it does, and it will give you a warning that it cannot delete./
and../
, but it will still delete the hidden files.
– Ryan Wheale
Jan 31 '17 at 21:12
This does not work on Mac console, hidden files are still there with that command line.
– agapitocandemor
Aug 21 '18 at 8:36
This should be the beautiful accepted answer. Thank you!
– Nam G VU
Sep 22 '16 at 15:53
This should be the beautiful accepted answer. Thank you!
– Nam G VU
Sep 22 '16 at 15:53
3
3
Doesn't this glob match "." and ".." too?
– hertzsprung
Jan 8 '17 at 13:28
Doesn't this glob match "." and ".." too?
– hertzsprung
Jan 8 '17 at 13:28
3
3
@hertzsprung - it does, and it will give you a warning that it cannot delete
./
and ../
, but it will still delete the hidden files.– Ryan Wheale
Jan 31 '17 at 21:12
@hertzsprung - it does, and it will give you a warning that it cannot delete
./
and ../
, but it will still delete the hidden files.– Ryan Wheale
Jan 31 '17 at 21:12
This does not work on Mac console, hidden files are still there with that command line.
– agapitocandemor
Aug 21 '18 at 8:36
This does not work on Mac console, hidden files are still there with that command line.
– agapitocandemor
Aug 21 '18 at 8:36
add a comment |
If you want to delete only files in /path/to/directory you can do
find /path/to/directory -type f -print0| xargs -0 rm
or
find /path/to/directory -type f -exec rm '{}' ;
You can do loads with find
, the advantage is you can list what is found without piping it to rm
so you can see what will be deleted before you start.
2
GNU find
as a-delete
predicate. If you still want to use-exec
, substituting;
with+
will gatherrm
calls together, increasing efficiency.
– enzotib
Sep 6 '11 at 12:19
1
large amount of files with '+' will cause problems, since list will be too large, same as rm -f *. and when removing large amounts of files from same folder (talking in millons) both of them are not good :) In the end C++ came along and removed files in order of inodes in dir-tree.
– Osis
Sep 6 '11 at 12:53
3
You really ought to add a -- after the rm. Without that if you have a file names -rf or similar will be interpreted as arguments to rm. e.g. xargs -0 rm -- or -exec rm -- {} ;
– Richm
Sep 6 '11 at 13:52
you can also provide the -n argument to xargs. That will cause it to split the rm commands to having a maximum number of arguments i.e. 'xargs -n 100 -0 rm --' will remove files in chunks of 100.
– Richm
Sep 6 '11 at 13:54
You can also add -maxdepth 1 to ensure that find does not return files from any subdirectories. i.e. find /path/to/directory -maxdepth 1 -type f
– Richm
Sep 6 '11 at 14:10
add a comment |
If you want to delete only files in /path/to/directory you can do
find /path/to/directory -type f -print0| xargs -0 rm
or
find /path/to/directory -type f -exec rm '{}' ;
You can do loads with find
, the advantage is you can list what is found without piping it to rm
so you can see what will be deleted before you start.
2
GNU find
as a-delete
predicate. If you still want to use-exec
, substituting;
with+
will gatherrm
calls together, increasing efficiency.
– enzotib
Sep 6 '11 at 12:19
1
large amount of files with '+' will cause problems, since list will be too large, same as rm -f *. and when removing large amounts of files from same folder (talking in millons) both of them are not good :) In the end C++ came along and removed files in order of inodes in dir-tree.
– Osis
Sep 6 '11 at 12:53
3
You really ought to add a -- after the rm. Without that if you have a file names -rf or similar will be interpreted as arguments to rm. e.g. xargs -0 rm -- or -exec rm -- {} ;
– Richm
Sep 6 '11 at 13:52
you can also provide the -n argument to xargs. That will cause it to split the rm commands to having a maximum number of arguments i.e. 'xargs -n 100 -0 rm --' will remove files in chunks of 100.
– Richm
Sep 6 '11 at 13:54
You can also add -maxdepth 1 to ensure that find does not return files from any subdirectories. i.e. find /path/to/directory -maxdepth 1 -type f
– Richm
Sep 6 '11 at 14:10
add a comment |
If you want to delete only files in /path/to/directory you can do
find /path/to/directory -type f -print0| xargs -0 rm
or
find /path/to/directory -type f -exec rm '{}' ;
You can do loads with find
, the advantage is you can list what is found without piping it to rm
so you can see what will be deleted before you start.
If you want to delete only files in /path/to/directory you can do
find /path/to/directory -type f -print0| xargs -0 rm
or
find /path/to/directory -type f -exec rm '{}' ;
You can do loads with find
, the advantage is you can list what is found without piping it to rm
so you can see what will be deleted before you start.
edited Nov 20 '16 at 6:41
αғsнιη
24.3k2295156
24.3k2295156
answered Sep 6 '11 at 12:13
Richard HollowayRichard Holloway
20.4k54252
20.4k54252
2
GNU find
as a-delete
predicate. If you still want to use-exec
, substituting;
with+
will gatherrm
calls together, increasing efficiency.
– enzotib
Sep 6 '11 at 12:19
1
large amount of files with '+' will cause problems, since list will be too large, same as rm -f *. and when removing large amounts of files from same folder (talking in millons) both of them are not good :) In the end C++ came along and removed files in order of inodes in dir-tree.
– Osis
Sep 6 '11 at 12:53
3
You really ought to add a -- after the rm. Without that if you have a file names -rf or similar will be interpreted as arguments to rm. e.g. xargs -0 rm -- or -exec rm -- {} ;
– Richm
Sep 6 '11 at 13:52
you can also provide the -n argument to xargs. That will cause it to split the rm commands to having a maximum number of arguments i.e. 'xargs -n 100 -0 rm --' will remove files in chunks of 100.
– Richm
Sep 6 '11 at 13:54
You can also add -maxdepth 1 to ensure that find does not return files from any subdirectories. i.e. find /path/to/directory -maxdepth 1 -type f
– Richm
Sep 6 '11 at 14:10
add a comment |
2
GNU find
as a-delete
predicate. If you still want to use-exec
, substituting;
with+
will gatherrm
calls together, increasing efficiency.
– enzotib
Sep 6 '11 at 12:19
1
large amount of files with '+' will cause problems, since list will be too large, same as rm -f *. and when removing large amounts of files from same folder (talking in millons) both of them are not good :) In the end C++ came along and removed files in order of inodes in dir-tree.
– Osis
Sep 6 '11 at 12:53
3
You really ought to add a -- after the rm. Without that if you have a file names -rf or similar will be interpreted as arguments to rm. e.g. xargs -0 rm -- or -exec rm -- {} ;
– Richm
Sep 6 '11 at 13:52
you can also provide the -n argument to xargs. That will cause it to split the rm commands to having a maximum number of arguments i.e. 'xargs -n 100 -0 rm --' will remove files in chunks of 100.
– Richm
Sep 6 '11 at 13:54
You can also add -maxdepth 1 to ensure that find does not return files from any subdirectories. i.e. find /path/to/directory -maxdepth 1 -type f
– Richm
Sep 6 '11 at 14:10
2
2
GNU find
as a -delete
predicate. If you still want to use -exec
, substituting ;
with +
will gather rm
calls together, increasing efficiency.– enzotib
Sep 6 '11 at 12:19
GNU find
as a -delete
predicate. If you still want to use -exec
, substituting ;
with +
will gather rm
calls together, increasing efficiency.– enzotib
Sep 6 '11 at 12:19
1
1
large amount of files with '+' will cause problems, since list will be too large, same as rm -f *. and when removing large amounts of files from same folder (talking in millons) both of them are not good :) In the end C++ came along and removed files in order of inodes in dir-tree.
– Osis
Sep 6 '11 at 12:53
large amount of files with '+' will cause problems, since list will be too large, same as rm -f *. and when removing large amounts of files from same folder (talking in millons) both of them are not good :) In the end C++ came along and removed files in order of inodes in dir-tree.
– Osis
Sep 6 '11 at 12:53
3
3
You really ought to add a -- after the rm. Without that if you have a file names -rf or similar will be interpreted as arguments to rm. e.g. xargs -0 rm -- or -exec rm -- {} ;
– Richm
Sep 6 '11 at 13:52
You really ought to add a -- after the rm. Without that if you have a file names -rf or similar will be interpreted as arguments to rm. e.g. xargs -0 rm -- or -exec rm -- {} ;
– Richm
Sep 6 '11 at 13:52
you can also provide the -n argument to xargs. That will cause it to split the rm commands to having a maximum number of arguments i.e. 'xargs -n 100 -0 rm --' will remove files in chunks of 100.
– Richm
Sep 6 '11 at 13:54
you can also provide the -n argument to xargs. That will cause it to split the rm commands to having a maximum number of arguments i.e. 'xargs -n 100 -0 rm --' will remove files in chunks of 100.
– Richm
Sep 6 '11 at 13:54
You can also add -maxdepth 1 to ensure that find does not return files from any subdirectories. i.e. find /path/to/directory -maxdepth 1 -type f
– Richm
Sep 6 '11 at 14:10
You can also add -maxdepth 1 to ensure that find does not return files from any subdirectories. i.e. find /path/to/directory -maxdepth 1 -type f
– Richm
Sep 6 '11 at 14:10
add a comment |
If you also want to remove all subdirectories and the directory itself, you can use rm -rf /path/to/directory
. But always double-check your line before pressing return, rm -rf
can cause lots of havock as well, e.g. if you accidentally insert a space after the first slash while having superuser permissions...
add a comment |
If you also want to remove all subdirectories and the directory itself, you can use rm -rf /path/to/directory
. But always double-check your line before pressing return, rm -rf
can cause lots of havock as well, e.g. if you accidentally insert a space after the first slash while having superuser permissions...
add a comment |
If you also want to remove all subdirectories and the directory itself, you can use rm -rf /path/to/directory
. But always double-check your line before pressing return, rm -rf
can cause lots of havock as well, e.g. if you accidentally insert a space after the first slash while having superuser permissions...
If you also want to remove all subdirectories and the directory itself, you can use rm -rf /path/to/directory
. But always double-check your line before pressing return, rm -rf
can cause lots of havock as well, e.g. if you accidentally insert a space after the first slash while having superuser permissions...
answered Sep 7 '11 at 8:51
Tobias KienzlerTobias Kienzler
3011521
3011521
add a comment |
add a comment |
To delete all files and directories(including the hidden ones) in a directory, you can try the following:
delete the folder, then recreate it
rm -rf dir_name && mkdir dir_name
use
find
find dir_name -mindepth 1 -delete
Here we specify -mindepth 1
to exclude the directory dir_name itself.
Take a look at the following link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Thanks for your advice and I've added more explanation for the links.
– zeekvfu
Nov 28 '13 at 5:04
2
Be careful, since deleting and re-creating the folder might result in different/wrong permissions for this folder!
– einjohn
Aug 29 '15 at 12:20
add a comment |
To delete all files and directories(including the hidden ones) in a directory, you can try the following:
delete the folder, then recreate it
rm -rf dir_name && mkdir dir_name
use
find
find dir_name -mindepth 1 -delete
Here we specify -mindepth 1
to exclude the directory dir_name itself.
Take a look at the following link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Thanks for your advice and I've added more explanation for the links.
– zeekvfu
Nov 28 '13 at 5:04
2
Be careful, since deleting and re-creating the folder might result in different/wrong permissions for this folder!
– einjohn
Aug 29 '15 at 12:20
add a comment |
To delete all files and directories(including the hidden ones) in a directory, you can try the following:
delete the folder, then recreate it
rm -rf dir_name && mkdir dir_name
use
find
find dir_name -mindepth 1 -delete
Here we specify -mindepth 1
to exclude the directory dir_name itself.
Take a look at the following link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
To delete all files and directories(including the hidden ones) in a directory, you can try the following:
delete the folder, then recreate it
rm -rf dir_name && mkdir dir_name
use
find
find dir_name -mindepth 1 -delete
Here we specify -mindepth 1
to exclude the directory dir_name itself.
Take a look at the following link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
edited Aug 29 '17 at 7:27
muru
1
1
answered Nov 27 '13 at 16:05
zeekvfuzeekvfu
26133
26133
Thanks for your advice and I've added more explanation for the links.
– zeekvfu
Nov 28 '13 at 5:04
2
Be careful, since deleting and re-creating the folder might result in different/wrong permissions for this folder!
– einjohn
Aug 29 '15 at 12:20
add a comment |
Thanks for your advice and I've added more explanation for the links.
– zeekvfu
Nov 28 '13 at 5:04
2
Be careful, since deleting and re-creating the folder might result in different/wrong permissions for this folder!
– einjohn
Aug 29 '15 at 12:20
Thanks for your advice and I've added more explanation for the links.
– zeekvfu
Nov 28 '13 at 5:04
Thanks for your advice and I've added more explanation for the links.
– zeekvfu
Nov 28 '13 at 5:04
2
2
Be careful, since deleting and re-creating the folder might result in different/wrong permissions for this folder!
– einjohn
Aug 29 '15 at 12:20
Be careful, since deleting and re-creating the folder might result in different/wrong permissions for this folder!
– einjohn
Aug 29 '15 at 12:20
add a comment |
You can cd
into the directory and then run the command rm *.*
just like in DOS if you remember.
1
DOS is DEL for files and RMDIR for emptied directories- and hidden and system files must have those ATTRIB attributes removed first. Not nearly as simple ;)
– Eric
Jun 10 '15 at 13:03
add a comment |
You can cd
into the directory and then run the command rm *.*
just like in DOS if you remember.
1
DOS is DEL for files and RMDIR for emptied directories- and hidden and system files must have those ATTRIB attributes removed first. Not nearly as simple ;)
– Eric
Jun 10 '15 at 13:03
add a comment |
You can cd
into the directory and then run the command rm *.*
just like in DOS if you remember.
You can cd
into the directory and then run the command rm *.*
just like in DOS if you remember.
edited May 1 '13 at 1:20
Eric Carvalho
41.4k17114145
41.4k17114145
answered May 1 '13 at 0:59
V K MavaniV K Mavani
111
111
1
DOS is DEL for files and RMDIR for emptied directories- and hidden and system files must have those ATTRIB attributes removed first. Not nearly as simple ;)
– Eric
Jun 10 '15 at 13:03
add a comment |
1
DOS is DEL for files and RMDIR for emptied directories- and hidden and system files must have those ATTRIB attributes removed first. Not nearly as simple ;)
– Eric
Jun 10 '15 at 13:03
1
1
DOS is DEL for files and RMDIR for emptied directories- and hidden and system files must have those ATTRIB attributes removed first. Not nearly as simple ;)
– Eric
Jun 10 '15 at 13:03
DOS is DEL for files and RMDIR for emptied directories- and hidden and system files must have those ATTRIB attributes removed first. Not nearly as simple ;)
– Eric
Jun 10 '15 at 13:03
add a comment |
To delete current directory, you could for example use rm -d ./*
-d tells to delete directories as well.
add a comment |
To delete current directory, you could for example use rm -d ./*
-d tells to delete directories as well.
add a comment |
To delete current directory, you could for example use rm -d ./*
-d tells to delete directories as well.
To delete current directory, you could for example use rm -d ./*
-d tells to delete directories as well.
answered Aug 29 '17 at 7:17
arvimanarviman
1213
1213
add a comment |
add a comment |
Since this question is constantly at the top of Google when I search for this myself:
The other answers suffer from different problems:
Some of them include
.
and..
which is noisy, confusing, and annoying.Some of them forget hidden files (files beginning with a dot).
They don't delete in a correct (deepest-first) order to allow directory deletion.
They descend into other (mounted) file systems, which is often undesired.
They're difficult to extend properly with extra parameters (more on that below).
So, to RECURSIVELY delete all files AND folders in a directory, do this:
find "${DIR}" -xdev -mindepth 1 -printf "%dt%yt%p" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Note that I added an -xdev
argument to prevent descending into mounts (like /proc
etc.).
Why not -depth
or -delete
?
Despite people constantly downvoting me for this, those methods have a downside: it doesn't seem like they're extensible enough to allow -prune
ing a subdirectory (without introducing more problems). By contrast with this method, you could insert
-not ( -path "${DIR}/subdir" -prune )
before the -mindepth
argument to exclude subdir
from having its contents deleted.
And for depth-first order, there's a-depth
flag infind
for that.
– Sergiy Kolodyazhnyy
May 21 '18 at 1:36
Uh... why not just use-delete
withfind
?-delete
is depth-first. You're already assuming non-POSIXfind
with the-printf
, so you might just as well use-delete
or-depth -print0 | xargs -0 rm
– muru
May 21 '18 at 6:41
@muru: Because I didn't know better... I'll change it.
– Mehrdad
May 21 '18 at 6:47
@muru: Actually, it seems your method doesn't work with-not ( -path "$DIR/subdir" )
... but mine does? Why?
– Mehrdad
May 21 '18 at 7:00
@Mehrdad what is that supposed to do?
– muru
May 21 '18 at 7:06
|
show 9 more comments
Since this question is constantly at the top of Google when I search for this myself:
The other answers suffer from different problems:
Some of them include
.
and..
which is noisy, confusing, and annoying.Some of them forget hidden files (files beginning with a dot).
They don't delete in a correct (deepest-first) order to allow directory deletion.
They descend into other (mounted) file systems, which is often undesired.
They're difficult to extend properly with extra parameters (more on that below).
So, to RECURSIVELY delete all files AND folders in a directory, do this:
find "${DIR}" -xdev -mindepth 1 -printf "%dt%yt%p" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Note that I added an -xdev
argument to prevent descending into mounts (like /proc
etc.).
Why not -depth
or -delete
?
Despite people constantly downvoting me for this, those methods have a downside: it doesn't seem like they're extensible enough to allow -prune
ing a subdirectory (without introducing more problems). By contrast with this method, you could insert
-not ( -path "${DIR}/subdir" -prune )
before the -mindepth
argument to exclude subdir
from having its contents deleted.
And for depth-first order, there's a-depth
flag infind
for that.
– Sergiy Kolodyazhnyy
May 21 '18 at 1:36
Uh... why not just use-delete
withfind
?-delete
is depth-first. You're already assuming non-POSIXfind
with the-printf
, so you might just as well use-delete
or-depth -print0 | xargs -0 rm
– muru
May 21 '18 at 6:41
@muru: Because I didn't know better... I'll change it.
– Mehrdad
May 21 '18 at 6:47
@muru: Actually, it seems your method doesn't work with-not ( -path "$DIR/subdir" )
... but mine does? Why?
– Mehrdad
May 21 '18 at 7:00
@Mehrdad what is that supposed to do?
– muru
May 21 '18 at 7:06
|
show 9 more comments
Since this question is constantly at the top of Google when I search for this myself:
The other answers suffer from different problems:
Some of them include
.
and..
which is noisy, confusing, and annoying.Some of them forget hidden files (files beginning with a dot).
They don't delete in a correct (deepest-first) order to allow directory deletion.
They descend into other (mounted) file systems, which is often undesired.
They're difficult to extend properly with extra parameters (more on that below).
So, to RECURSIVELY delete all files AND folders in a directory, do this:
find "${DIR}" -xdev -mindepth 1 -printf "%dt%yt%p" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Note that I added an -xdev
argument to prevent descending into mounts (like /proc
etc.).
Why not -depth
or -delete
?
Despite people constantly downvoting me for this, those methods have a downside: it doesn't seem like they're extensible enough to allow -prune
ing a subdirectory (without introducing more problems). By contrast with this method, you could insert
-not ( -path "${DIR}/subdir" -prune )
before the -mindepth
argument to exclude subdir
from having its contents deleted.
Since this question is constantly at the top of Google when I search for this myself:
The other answers suffer from different problems:
Some of them include
.
and..
which is noisy, confusing, and annoying.Some of them forget hidden files (files beginning with a dot).
They don't delete in a correct (deepest-first) order to allow directory deletion.
They descend into other (mounted) file systems, which is often undesired.
They're difficult to extend properly with extra parameters (more on that below).
So, to RECURSIVELY delete all files AND folders in a directory, do this:
find "${DIR}" -xdev -mindepth 1 -printf "%dt%yt%p" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Note that I added an -xdev
argument to prevent descending into mounts (like /proc
etc.).
Why not -depth
or -delete
?
Despite people constantly downvoting me for this, those methods have a downside: it doesn't seem like they're extensible enough to allow -prune
ing a subdirectory (without introducing more problems). By contrast with this method, you could insert
-not ( -path "${DIR}/subdir" -prune )
before the -mindepth
argument to exclude subdir
from having its contents deleted.
edited May 21 '18 at 7:47
answered May 21 '18 at 0:54
MehrdadMehrdad
1,65682846
1,65682846
And for depth-first order, there's a-depth
flag infind
for that.
– Sergiy Kolodyazhnyy
May 21 '18 at 1:36
Uh... why not just use-delete
withfind
?-delete
is depth-first. You're already assuming non-POSIXfind
with the-printf
, so you might just as well use-delete
or-depth -print0 | xargs -0 rm
– muru
May 21 '18 at 6:41
@muru: Because I didn't know better... I'll change it.
– Mehrdad
May 21 '18 at 6:47
@muru: Actually, it seems your method doesn't work with-not ( -path "$DIR/subdir" )
... but mine does? Why?
– Mehrdad
May 21 '18 at 7:00
@Mehrdad what is that supposed to do?
– muru
May 21 '18 at 7:06
|
show 9 more comments
And for depth-first order, there's a-depth
flag infind
for that.
– Sergiy Kolodyazhnyy
May 21 '18 at 1:36
Uh... why not just use-delete
withfind
?-delete
is depth-first. You're already assuming non-POSIXfind
with the-printf
, so you might just as well use-delete
or-depth -print0 | xargs -0 rm
– muru
May 21 '18 at 6:41
@muru: Because I didn't know better... I'll change it.
– Mehrdad
May 21 '18 at 6:47
@muru: Actually, it seems your method doesn't work with-not ( -path "$DIR/subdir" )
... but mine does? Why?
– Mehrdad
May 21 '18 at 7:00
@Mehrdad what is that supposed to do?
– muru
May 21 '18 at 7:06
And for depth-first order, there's a
-depth
flag in find
for that.– Sergiy Kolodyazhnyy
May 21 '18 at 1:36
And for depth-first order, there's a
-depth
flag in find
for that.– Sergiy Kolodyazhnyy
May 21 '18 at 1:36
Uh... why not just use
-delete
with find
? -delete
is depth-first. You're already assuming non-POSIX find
with the -printf
, so you might just as well use -delete
or -depth -print0 | xargs -0 rm
– muru
May 21 '18 at 6:41
Uh... why not just use
-delete
with find
? -delete
is depth-first. You're already assuming non-POSIX find
with the -printf
, so you might just as well use -delete
or -depth -print0 | xargs -0 rm
– muru
May 21 '18 at 6:41
@muru: Because I didn't know better... I'll change it.
– Mehrdad
May 21 '18 at 6:47
@muru: Because I didn't know better... I'll change it.
– Mehrdad
May 21 '18 at 6:47
@muru: Actually, it seems your method doesn't work with
-not ( -path "$DIR/subdir" )
... but mine does? Why?– Mehrdad
May 21 '18 at 7:00
@muru: Actually, it seems your method doesn't work with
-not ( -path "$DIR/subdir" )
... but mine does? Why?– Mehrdad
May 21 '18 at 7:00
@Mehrdad what is that supposed to do?
– muru
May 21 '18 at 7:06
@Mehrdad what is that supposed to do?
– muru
May 21 '18 at 7:06
|
show 9 more comments
protected by αғsнιη May 21 '18 at 3:04
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?