How can I recursively delete all files of a specific extension in the current directory?
up vote
437
down vote
favorite
How do I safely delete all files with a specific extension (e.g. .bak
) from current directory and all subfolders using one command-line? Simply, I'm afraid to use rm
since I used it wrong once and now I need advice.
command-line files rm batch
add a comment |
up vote
437
down vote
favorite
How do I safely delete all files with a specific extension (e.g. .bak
) from current directory and all subfolders using one command-line? Simply, I'm afraid to use rm
since I used it wrong once and now I need advice.
command-line files rm batch
add a comment |
up vote
437
down vote
favorite
up vote
437
down vote
favorite
How do I safely delete all files with a specific extension (e.g. .bak
) from current directory and all subfolders using one command-line? Simply, I'm afraid to use rm
since I used it wrong once and now I need advice.
command-line files rm batch
How do I safely delete all files with a specific extension (e.g. .bak
) from current directory and all subfolders using one command-line? Simply, I'm afraid to use rm
since I used it wrong once and now I need advice.
command-line files rm batch
command-line files rm batch
edited Nov 15 '13 at 16:16
Glutanimate
16k872130
16k872130
asked Nov 15 '13 at 13:03
user216038
2,188384
2,188384
add a comment |
add a comment |
6 Answers
6
active
oldest
votes
up vote
684
down vote
accepted
You don't even need to use rm
in this case if you are afraid. Use find
:
find . -name "*.bak" -type f -delete
But use it with precaution. Run first:
find . -name "*.bak" -type f
to see exactly which files you will remove.
Also, make sure that -delete
is the last argument in your command. If you put it before the -name *.bak argument
, it will delete everything.
See man find
and man rm
for more info and see also this related question on SE:
- How do I remove all .pyc files from a project?
How's this different fromrm *.bak
?
– sayantankhan
Nov 15 '13 at 13:11
8
@Bolt64 Yourrm *.bak
will not work for subdirectories.
– Radu Rădeanu
Nov 15 '13 at 13:14
With default settingsrm *.bak
will only delete all files ending with .bak in the current directory. TO also do things in subdirectories you either needed to fiddle with globs, use the -r option or use the find example.
– Hennes
Nov 15 '13 at 13:14
7
@Hennes Be careful withrm -r *.bak
! It also removes directories ending in.bak
with all their content.
– Radu Rădeanu
Nov 15 '13 at 13:34
30
Make sure that-delete
is the last argument in your command. If you put it before the-name *.bak
argument, it will delete everything.
– Michael
Oct 29 '14 at 14:36
|
show 14 more comments
up vote
32
down vote
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
1
Welcome to askubuntu! While this is a perfectly valid answer I don't think there's any advantage in using this instead of the-delete
flag offind
. More information can be found in the GNU manuals entry for deleting files with find.
– Glutanimate
Apr 4 '14 at 20:11
1
you are probably right, it's just an alternative solution, perhaps more raw ;)
– lokers
Apr 4 '14 at 22:13
9
This is not just an alternative but an example how other commands can be combined together with the pipe '|'. +1
– Boris Pavlović
Jun 5 '14 at 7:18
11
This alternative solutions work on other environments that lack -delete (like cygwin)
– ciriarte
Aug 15 '14 at 4:07
2
I think this is the best answer here.
– Léo Léopold Hertz 준영
Jun 29 '15 at 11:27
|
show 3 more comments
up vote
29
down vote
First run the command shopt -s globstar
. You can run that on the command line, and it'll have effect only in that shell window. You can put it in your .bashrc
, and then all newly started shells will pick it up. The effect of that command is to make **/
match files in the current directory and its subdirectories recursively (by default, **/
means the same thing as */
: only in the immediate subdirectories). Then:
rm **/*.bak
(or gvfs-trash **/*.bak
or what have you).
add a comment |
up vote
19
down vote
Deleting files is for me not something you should use rm
for. Here is an alternative:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
As Flimm states in the comments:
The package
trash-cli
does the same thing asgvfs-trash
without the dependency on gvfs.
So:
sudo apt-get install trash-cli
You don't need to make an alias for this, because the trash-cli
package provides a command trash
, which does what we want.
As Eliah Kagan makes clear in extensive comments, you can also make this recursive using find
. In that case you can't use an alias, so the commands below assume you have installed trash-cli
. I summarise Eliah's comments:
This command finds and displays all .bak
files and symlinks anywhere in the current directory or its subdirectories or below.
find . -name '*.bak' -xtype f
To delete them, append an -exec
with the trash
command:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
selects files and symlinks to files, but not folders. To delete .bak folders too, remove that part, and use -execdir
, which avoids cannot trash non-existent
errors for .bak
files inside .bak
directories:
find . -name '*.bak' -execdir trash {} +
3
"Don't userm
to delete things" is a controversial statement but I have to agree that it's often wiser to use something that will let you undo things.
– Oli♦
Nov 15 '13 at 15:12
2
The packagetrash-cli
does the same thing asgvfs-trash
without the dependency ongvfs
.
– Flimm
Nov 20 '13 at 9:08
I have edited it in the answer, next time feel free to do the edit yourself.
– don.joey
Nov 20 '13 at 10:06
@don.joey This answer seems to sayfind . -name "*.bak" -type f
displays whattrash *.bak
deletes. Is that really what you mean? You can move directories to the trash withtrash
orgvfs-trash
, buttrash *.bak
will only moves files and directories whose names end with.bak
and that reside immediately in the current directory. The shell expands*.bak
, sotrash *.bak
won't affect.bak
files in subdirectories not themselves named.bak
.
– Eliah Kagan
Oct 14 '17 at 2:30
1
@don.joey Yesls *.bak
(which I think you mean) lists whattrash *.bak
trashes.find . -name '*.bak' -xtype f -exec trash {} +
trashes all.bak
files anywhere under.
. It can't use an alias, so installtrash-cli
or writegvfs-trash
instead. Here's an example.-xtype f
selects files and symlinks to files, but not folders. To delete.bak
folders too, usefind . -name '*.bak' -execdir trash {} +
, which avoidscannot trash non existent
errors for.bak
files inside.bak
directories. Please feel free to use any of this in your answer.
– Eliah Kagan
Oct 14 '17 at 19:15
|
show 2 more comments
up vote
3
down vote
If you want to delete all files of a certain type, but only 1 folder "deep" from the current folder:
find . -maxdepth 2 -name "*.log" -type f -delete
-maxdepth 2 because the current directory "." counts as the first folder.
add a comment |
up vote
0
down vote
If you are inside a git repo, you can use:
git clean -fdx
This deletes untracked files and files in .gitignore.
add a comment |
6 Answers
6
active
oldest
votes
6 Answers
6
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
684
down vote
accepted
You don't even need to use rm
in this case if you are afraid. Use find
:
find . -name "*.bak" -type f -delete
But use it with precaution. Run first:
find . -name "*.bak" -type f
to see exactly which files you will remove.
Also, make sure that -delete
is the last argument in your command. If you put it before the -name *.bak argument
, it will delete everything.
See man find
and man rm
for more info and see also this related question on SE:
- How do I remove all .pyc files from a project?
How's this different fromrm *.bak
?
– sayantankhan
Nov 15 '13 at 13:11
8
@Bolt64 Yourrm *.bak
will not work for subdirectories.
– Radu Rădeanu
Nov 15 '13 at 13:14
With default settingsrm *.bak
will only delete all files ending with .bak in the current directory. TO also do things in subdirectories you either needed to fiddle with globs, use the -r option or use the find example.
– Hennes
Nov 15 '13 at 13:14
7
@Hennes Be careful withrm -r *.bak
! It also removes directories ending in.bak
with all their content.
– Radu Rădeanu
Nov 15 '13 at 13:34
30
Make sure that-delete
is the last argument in your command. If you put it before the-name *.bak
argument, it will delete everything.
– Michael
Oct 29 '14 at 14:36
|
show 14 more comments
up vote
684
down vote
accepted
You don't even need to use rm
in this case if you are afraid. Use find
:
find . -name "*.bak" -type f -delete
But use it with precaution. Run first:
find . -name "*.bak" -type f
to see exactly which files you will remove.
Also, make sure that -delete
is the last argument in your command. If you put it before the -name *.bak argument
, it will delete everything.
See man find
and man rm
for more info and see also this related question on SE:
- How do I remove all .pyc files from a project?
How's this different fromrm *.bak
?
– sayantankhan
Nov 15 '13 at 13:11
8
@Bolt64 Yourrm *.bak
will not work for subdirectories.
– Radu Rădeanu
Nov 15 '13 at 13:14
With default settingsrm *.bak
will only delete all files ending with .bak in the current directory. TO also do things in subdirectories you either needed to fiddle with globs, use the -r option or use the find example.
– Hennes
Nov 15 '13 at 13:14
7
@Hennes Be careful withrm -r *.bak
! It also removes directories ending in.bak
with all their content.
– Radu Rădeanu
Nov 15 '13 at 13:34
30
Make sure that-delete
is the last argument in your command. If you put it before the-name *.bak
argument, it will delete everything.
– Michael
Oct 29 '14 at 14:36
|
show 14 more comments
up vote
684
down vote
accepted
up vote
684
down vote
accepted
You don't even need to use rm
in this case if you are afraid. Use find
:
find . -name "*.bak" -type f -delete
But use it with precaution. Run first:
find . -name "*.bak" -type f
to see exactly which files you will remove.
Also, make sure that -delete
is the last argument in your command. If you put it before the -name *.bak argument
, it will delete everything.
See man find
and man rm
for more info and see also this related question on SE:
- How do I remove all .pyc files from a project?
You don't even need to use rm
in this case if you are afraid. Use find
:
find . -name "*.bak" -type f -delete
But use it with precaution. Run first:
find . -name "*.bak" -type f
to see exactly which files you will remove.
Also, make sure that -delete
is the last argument in your command. If you put it before the -name *.bak argument
, it will delete everything.
See man find
and man rm
for more info and see also this related question on SE:
- How do I remove all .pyc files from a project?
edited May 23 '17 at 12:39
Community♦
1
1
answered Nov 15 '13 at 13:08
Radu Rădeanu
114k34243321
114k34243321
How's this different fromrm *.bak
?
– sayantankhan
Nov 15 '13 at 13:11
8
@Bolt64 Yourrm *.bak
will not work for subdirectories.
– Radu Rădeanu
Nov 15 '13 at 13:14
With default settingsrm *.bak
will only delete all files ending with .bak in the current directory. TO also do things in subdirectories you either needed to fiddle with globs, use the -r option or use the find example.
– Hennes
Nov 15 '13 at 13:14
7
@Hennes Be careful withrm -r *.bak
! It also removes directories ending in.bak
with all their content.
– Radu Rădeanu
Nov 15 '13 at 13:34
30
Make sure that-delete
is the last argument in your command. If you put it before the-name *.bak
argument, it will delete everything.
– Michael
Oct 29 '14 at 14:36
|
show 14 more comments
How's this different fromrm *.bak
?
– sayantankhan
Nov 15 '13 at 13:11
8
@Bolt64 Yourrm *.bak
will not work for subdirectories.
– Radu Rădeanu
Nov 15 '13 at 13:14
With default settingsrm *.bak
will only delete all files ending with .bak in the current directory. TO also do things in subdirectories you either needed to fiddle with globs, use the -r option or use the find example.
– Hennes
Nov 15 '13 at 13:14
7
@Hennes Be careful withrm -r *.bak
! It also removes directories ending in.bak
with all their content.
– Radu Rădeanu
Nov 15 '13 at 13:34
30
Make sure that-delete
is the last argument in your command. If you put it before the-name *.bak
argument, it will delete everything.
– Michael
Oct 29 '14 at 14:36
How's this different from
rm *.bak
?– sayantankhan
Nov 15 '13 at 13:11
How's this different from
rm *.bak
?– sayantankhan
Nov 15 '13 at 13:11
8
8
@Bolt64 Your
rm *.bak
will not work for subdirectories.– Radu Rădeanu
Nov 15 '13 at 13:14
@Bolt64 Your
rm *.bak
will not work for subdirectories.– Radu Rădeanu
Nov 15 '13 at 13:14
With default settings
rm *.bak
will only delete all files ending with .bak in the current directory. TO also do things in subdirectories you either needed to fiddle with globs, use the -r option or use the find example.– Hennes
Nov 15 '13 at 13:14
With default settings
rm *.bak
will only delete all files ending with .bak in the current directory. TO also do things in subdirectories you either needed to fiddle with globs, use the -r option or use the find example.– Hennes
Nov 15 '13 at 13:14
7
7
@Hennes Be careful with
rm -r *.bak
! It also removes directories ending in .bak
with all their content.– Radu Rădeanu
Nov 15 '13 at 13:34
@Hennes Be careful with
rm -r *.bak
! It also removes directories ending in .bak
with all their content.– Radu Rădeanu
Nov 15 '13 at 13:34
30
30
Make sure that
-delete
is the last argument in your command. If you put it before the -name *.bak
argument, it will delete everything.– Michael
Oct 29 '14 at 14:36
Make sure that
-delete
is the last argument in your command. If you put it before the -name *.bak
argument, it will delete everything.– Michael
Oct 29 '14 at 14:36
|
show 14 more comments
up vote
32
down vote
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
1
Welcome to askubuntu! While this is a perfectly valid answer I don't think there's any advantage in using this instead of the-delete
flag offind
. More information can be found in the GNU manuals entry for deleting files with find.
– Glutanimate
Apr 4 '14 at 20:11
1
you are probably right, it's just an alternative solution, perhaps more raw ;)
– lokers
Apr 4 '14 at 22:13
9
This is not just an alternative but an example how other commands can be combined together with the pipe '|'. +1
– Boris Pavlović
Jun 5 '14 at 7:18
11
This alternative solutions work on other environments that lack -delete (like cygwin)
– ciriarte
Aug 15 '14 at 4:07
2
I think this is the best answer here.
– Léo Léopold Hertz 준영
Jun 29 '15 at 11:27
|
show 3 more comments
up vote
32
down vote
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
1
Welcome to askubuntu! While this is a perfectly valid answer I don't think there's any advantage in using this instead of the-delete
flag offind
. More information can be found in the GNU manuals entry for deleting files with find.
– Glutanimate
Apr 4 '14 at 20:11
1
you are probably right, it's just an alternative solution, perhaps more raw ;)
– lokers
Apr 4 '14 at 22:13
9
This is not just an alternative but an example how other commands can be combined together with the pipe '|'. +1
– Boris Pavlović
Jun 5 '14 at 7:18
11
This alternative solutions work on other environments that lack -delete (like cygwin)
– ciriarte
Aug 15 '14 at 4:07
2
I think this is the best answer here.
– Léo Léopold Hertz 준영
Jun 29 '15 at 11:27
|
show 3 more comments
up vote
32
down vote
up vote
32
down vote
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
edited Feb 8 '15 at 16:13
muru
133k19282479
133k19282479
answered Apr 4 '14 at 19:10
lokers
42942
42942
1
Welcome to askubuntu! While this is a perfectly valid answer I don't think there's any advantage in using this instead of the-delete
flag offind
. More information can be found in the GNU manuals entry for deleting files with find.
– Glutanimate
Apr 4 '14 at 20:11
1
you are probably right, it's just an alternative solution, perhaps more raw ;)
– lokers
Apr 4 '14 at 22:13
9
This is not just an alternative but an example how other commands can be combined together with the pipe '|'. +1
– Boris Pavlović
Jun 5 '14 at 7:18
11
This alternative solutions work on other environments that lack -delete (like cygwin)
– ciriarte
Aug 15 '14 at 4:07
2
I think this is the best answer here.
– Léo Léopold Hertz 준영
Jun 29 '15 at 11:27
|
show 3 more comments
1
Welcome to askubuntu! While this is a perfectly valid answer I don't think there's any advantage in using this instead of the-delete
flag offind
. More information can be found in the GNU manuals entry for deleting files with find.
– Glutanimate
Apr 4 '14 at 20:11
1
you are probably right, it's just an alternative solution, perhaps more raw ;)
– lokers
Apr 4 '14 at 22:13
9
This is not just an alternative but an example how other commands can be combined together with the pipe '|'. +1
– Boris Pavlović
Jun 5 '14 at 7:18
11
This alternative solutions work on other environments that lack -delete (like cygwin)
– ciriarte
Aug 15 '14 at 4:07
2
I think this is the best answer here.
– Léo Léopold Hertz 준영
Jun 29 '15 at 11:27
1
1
Welcome to askubuntu! While this is a perfectly valid answer I don't think there's any advantage in using this instead of the
-delete
flag of find
. More information can be found in the GNU manuals entry for deleting files with find.– Glutanimate
Apr 4 '14 at 20:11
Welcome to askubuntu! While this is a perfectly valid answer I don't think there's any advantage in using this instead of the
-delete
flag of find
. More information can be found in the GNU manuals entry for deleting files with find.– Glutanimate
Apr 4 '14 at 20:11
1
1
you are probably right, it's just an alternative solution, perhaps more raw ;)
– lokers
Apr 4 '14 at 22:13
you are probably right, it's just an alternative solution, perhaps more raw ;)
– lokers
Apr 4 '14 at 22:13
9
9
This is not just an alternative but an example how other commands can be combined together with the pipe '|'. +1
– Boris Pavlović
Jun 5 '14 at 7:18
This is not just an alternative but an example how other commands can be combined together with the pipe '|'. +1
– Boris Pavlović
Jun 5 '14 at 7:18
11
11
This alternative solutions work on other environments that lack -delete (like cygwin)
– ciriarte
Aug 15 '14 at 4:07
This alternative solutions work on other environments that lack -delete (like cygwin)
– ciriarte
Aug 15 '14 at 4:07
2
2
I think this is the best answer here.
– Léo Léopold Hertz 준영
Jun 29 '15 at 11:27
I think this is the best answer here.
– Léo Léopold Hertz 준영
Jun 29 '15 at 11:27
|
show 3 more comments
up vote
29
down vote
First run the command shopt -s globstar
. You can run that on the command line, and it'll have effect only in that shell window. You can put it in your .bashrc
, and then all newly started shells will pick it up. The effect of that command is to make **/
match files in the current directory and its subdirectories recursively (by default, **/
means the same thing as */
: only in the immediate subdirectories). Then:
rm **/*.bak
(or gvfs-trash **/*.bak
or what have you).
add a comment |
up vote
29
down vote
First run the command shopt -s globstar
. You can run that on the command line, and it'll have effect only in that shell window. You can put it in your .bashrc
, and then all newly started shells will pick it up. The effect of that command is to make **/
match files in the current directory and its subdirectories recursively (by default, **/
means the same thing as */
: only in the immediate subdirectories). Then:
rm **/*.bak
(or gvfs-trash **/*.bak
or what have you).
add a comment |
up vote
29
down vote
up vote
29
down vote
First run the command shopt -s globstar
. You can run that on the command line, and it'll have effect only in that shell window. You can put it in your .bashrc
, and then all newly started shells will pick it up. The effect of that command is to make **/
match files in the current directory and its subdirectories recursively (by default, **/
means the same thing as */
: only in the immediate subdirectories). Then:
rm **/*.bak
(or gvfs-trash **/*.bak
or what have you).
First run the command shopt -s globstar
. You can run that on the command line, and it'll have effect only in that shell window. You can put it in your .bashrc
, and then all newly started shells will pick it up. The effect of that command is to make **/
match files in the current directory and its subdirectories recursively (by default, **/
means the same thing as */
: only in the immediate subdirectories). Then:
rm **/*.bak
(or gvfs-trash **/*.bak
or what have you).
answered Nov 15 '13 at 18:59
Gilles
44.1k1398137
44.1k1398137
add a comment |
add a comment |
up vote
19
down vote
Deleting files is for me not something you should use rm
for. Here is an alternative:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
As Flimm states in the comments:
The package
trash-cli
does the same thing asgvfs-trash
without the dependency on gvfs.
So:
sudo apt-get install trash-cli
You don't need to make an alias for this, because the trash-cli
package provides a command trash
, which does what we want.
As Eliah Kagan makes clear in extensive comments, you can also make this recursive using find
. In that case you can't use an alias, so the commands below assume you have installed trash-cli
. I summarise Eliah's comments:
This command finds and displays all .bak
files and symlinks anywhere in the current directory or its subdirectories or below.
find . -name '*.bak' -xtype f
To delete them, append an -exec
with the trash
command:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
selects files and symlinks to files, but not folders. To delete .bak folders too, remove that part, and use -execdir
, which avoids cannot trash non-existent
errors for .bak
files inside .bak
directories:
find . -name '*.bak' -execdir trash {} +
3
"Don't userm
to delete things" is a controversial statement but I have to agree that it's often wiser to use something that will let you undo things.
– Oli♦
Nov 15 '13 at 15:12
2
The packagetrash-cli
does the same thing asgvfs-trash
without the dependency ongvfs
.
– Flimm
Nov 20 '13 at 9:08
I have edited it in the answer, next time feel free to do the edit yourself.
– don.joey
Nov 20 '13 at 10:06
@don.joey This answer seems to sayfind . -name "*.bak" -type f
displays whattrash *.bak
deletes. Is that really what you mean? You can move directories to the trash withtrash
orgvfs-trash
, buttrash *.bak
will only moves files and directories whose names end with.bak
and that reside immediately in the current directory. The shell expands*.bak
, sotrash *.bak
won't affect.bak
files in subdirectories not themselves named.bak
.
– Eliah Kagan
Oct 14 '17 at 2:30
1
@don.joey Yesls *.bak
(which I think you mean) lists whattrash *.bak
trashes.find . -name '*.bak' -xtype f -exec trash {} +
trashes all.bak
files anywhere under.
. It can't use an alias, so installtrash-cli
or writegvfs-trash
instead. Here's an example.-xtype f
selects files and symlinks to files, but not folders. To delete.bak
folders too, usefind . -name '*.bak' -execdir trash {} +
, which avoidscannot trash non existent
errors for.bak
files inside.bak
directories. Please feel free to use any of this in your answer.
– Eliah Kagan
Oct 14 '17 at 19:15
|
show 2 more comments
up vote
19
down vote
Deleting files is for me not something you should use rm
for. Here is an alternative:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
As Flimm states in the comments:
The package
trash-cli
does the same thing asgvfs-trash
without the dependency on gvfs.
So:
sudo apt-get install trash-cli
You don't need to make an alias for this, because the trash-cli
package provides a command trash
, which does what we want.
As Eliah Kagan makes clear in extensive comments, you can also make this recursive using find
. In that case you can't use an alias, so the commands below assume you have installed trash-cli
. I summarise Eliah's comments:
This command finds and displays all .bak
files and symlinks anywhere in the current directory or its subdirectories or below.
find . -name '*.bak' -xtype f
To delete them, append an -exec
with the trash
command:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
selects files and symlinks to files, but not folders. To delete .bak folders too, remove that part, and use -execdir
, which avoids cannot trash non-existent
errors for .bak
files inside .bak
directories:
find . -name '*.bak' -execdir trash {} +
3
"Don't userm
to delete things" is a controversial statement but I have to agree that it's often wiser to use something that will let you undo things.
– Oli♦
Nov 15 '13 at 15:12
2
The packagetrash-cli
does the same thing asgvfs-trash
without the dependency ongvfs
.
– Flimm
Nov 20 '13 at 9:08
I have edited it in the answer, next time feel free to do the edit yourself.
– don.joey
Nov 20 '13 at 10:06
@don.joey This answer seems to sayfind . -name "*.bak" -type f
displays whattrash *.bak
deletes. Is that really what you mean? You can move directories to the trash withtrash
orgvfs-trash
, buttrash *.bak
will only moves files and directories whose names end with.bak
and that reside immediately in the current directory. The shell expands*.bak
, sotrash *.bak
won't affect.bak
files in subdirectories not themselves named.bak
.
– Eliah Kagan
Oct 14 '17 at 2:30
1
@don.joey Yesls *.bak
(which I think you mean) lists whattrash *.bak
trashes.find . -name '*.bak' -xtype f -exec trash {} +
trashes all.bak
files anywhere under.
. It can't use an alias, so installtrash-cli
or writegvfs-trash
instead. Here's an example.-xtype f
selects files and symlinks to files, but not folders. To delete.bak
folders too, usefind . -name '*.bak' -execdir trash {} +
, which avoidscannot trash non existent
errors for.bak
files inside.bak
directories. Please feel free to use any of this in your answer.
– Eliah Kagan
Oct 14 '17 at 19:15
|
show 2 more comments
up vote
19
down vote
up vote
19
down vote
Deleting files is for me not something you should use rm
for. Here is an alternative:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
As Flimm states in the comments:
The package
trash-cli
does the same thing asgvfs-trash
without the dependency on gvfs.
So:
sudo apt-get install trash-cli
You don't need to make an alias for this, because the trash-cli
package provides a command trash
, which does what we want.
As Eliah Kagan makes clear in extensive comments, you can also make this recursive using find
. In that case you can't use an alias, so the commands below assume you have installed trash-cli
. I summarise Eliah's comments:
This command finds and displays all .bak
files and symlinks anywhere in the current directory or its subdirectories or below.
find . -name '*.bak' -xtype f
To delete them, append an -exec
with the trash
command:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
selects files and symlinks to files, but not folders. To delete .bak folders too, remove that part, and use -execdir
, which avoids cannot trash non-existent
errors for .bak
files inside .bak
directories:
find . -name '*.bak' -execdir trash {} +
Deleting files is for me not something you should use rm
for. Here is an alternative:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
As Flimm states in the comments:
The package
trash-cli
does the same thing asgvfs-trash
without the dependency on gvfs.
So:
sudo apt-get install trash-cli
You don't need to make an alias for this, because the trash-cli
package provides a command trash
, which does what we want.
As Eliah Kagan makes clear in extensive comments, you can also make this recursive using find
. In that case you can't use an alias, so the commands below assume you have installed trash-cli
. I summarise Eliah's comments:
This command finds and displays all .bak
files and symlinks anywhere in the current directory or its subdirectories or below.
find . -name '*.bak' -xtype f
To delete them, append an -exec
with the trash
command:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
selects files and symlinks to files, but not folders. To delete .bak folders too, remove that part, and use -execdir
, which avoids cannot trash non-existent
errors for .bak
files inside .bak
directories:
find . -name '*.bak' -execdir trash {} +
edited Oct 20 '17 at 7:12
Zanna
48.9k13123234
48.9k13123234
answered Nov 15 '13 at 13:52
don.joey
16.9k126294
16.9k126294
3
"Don't userm
to delete things" is a controversial statement but I have to agree that it's often wiser to use something that will let you undo things.
– Oli♦
Nov 15 '13 at 15:12
2
The packagetrash-cli
does the same thing asgvfs-trash
without the dependency ongvfs
.
– Flimm
Nov 20 '13 at 9:08
I have edited it in the answer, next time feel free to do the edit yourself.
– don.joey
Nov 20 '13 at 10:06
@don.joey This answer seems to sayfind . -name "*.bak" -type f
displays whattrash *.bak
deletes. Is that really what you mean? You can move directories to the trash withtrash
orgvfs-trash
, buttrash *.bak
will only moves files and directories whose names end with.bak
and that reside immediately in the current directory. The shell expands*.bak
, sotrash *.bak
won't affect.bak
files in subdirectories not themselves named.bak
.
– Eliah Kagan
Oct 14 '17 at 2:30
1
@don.joey Yesls *.bak
(which I think you mean) lists whattrash *.bak
trashes.find . -name '*.bak' -xtype f -exec trash {} +
trashes all.bak
files anywhere under.
. It can't use an alias, so installtrash-cli
or writegvfs-trash
instead. Here's an example.-xtype f
selects files and symlinks to files, but not folders. To delete.bak
folders too, usefind . -name '*.bak' -execdir trash {} +
, which avoidscannot trash non existent
errors for.bak
files inside.bak
directories. Please feel free to use any of this in your answer.
– Eliah Kagan
Oct 14 '17 at 19:15
|
show 2 more comments
3
"Don't userm
to delete things" is a controversial statement but I have to agree that it's often wiser to use something that will let you undo things.
– Oli♦
Nov 15 '13 at 15:12
2
The packagetrash-cli
does the same thing asgvfs-trash
without the dependency ongvfs
.
– Flimm
Nov 20 '13 at 9:08
I have edited it in the answer, next time feel free to do the edit yourself.
– don.joey
Nov 20 '13 at 10:06
@don.joey This answer seems to sayfind . -name "*.bak" -type f
displays whattrash *.bak
deletes. Is that really what you mean? You can move directories to the trash withtrash
orgvfs-trash
, buttrash *.bak
will only moves files and directories whose names end with.bak
and that reside immediately in the current directory. The shell expands*.bak
, sotrash *.bak
won't affect.bak
files in subdirectories not themselves named.bak
.
– Eliah Kagan
Oct 14 '17 at 2:30
1
@don.joey Yesls *.bak
(which I think you mean) lists whattrash *.bak
trashes.find . -name '*.bak' -xtype f -exec trash {} +
trashes all.bak
files anywhere under.
. It can't use an alias, so installtrash-cli
or writegvfs-trash
instead. Here's an example.-xtype f
selects files and symlinks to files, but not folders. To delete.bak
folders too, usefind . -name '*.bak' -execdir trash {} +
, which avoidscannot trash non existent
errors for.bak
files inside.bak
directories. Please feel free to use any of this in your answer.
– Eliah Kagan
Oct 14 '17 at 19:15
3
3
"Don't use
rm
to delete things" is a controversial statement but I have to agree that it's often wiser to use something that will let you undo things.– Oli♦
Nov 15 '13 at 15:12
"Don't use
rm
to delete things" is a controversial statement but I have to agree that it's often wiser to use something that will let you undo things.– Oli♦
Nov 15 '13 at 15:12
2
2
The package
trash-cli
does the same thing as gvfs-trash
without the dependency on gvfs
.– Flimm
Nov 20 '13 at 9:08
The package
trash-cli
does the same thing as gvfs-trash
without the dependency on gvfs
.– Flimm
Nov 20 '13 at 9:08
I have edited it in the answer, next time feel free to do the edit yourself.
– don.joey
Nov 20 '13 at 10:06
I have edited it in the answer, next time feel free to do the edit yourself.
– don.joey
Nov 20 '13 at 10:06
@don.joey This answer seems to say
find . -name "*.bak" -type f
displays what trash *.bak
deletes. Is that really what you mean? You can move directories to the trash with trash
or gvfs-trash
, but trash *.bak
will only moves files and directories whose names end with .bak
and that reside immediately in the current directory. The shell expands *.bak
, so trash *.bak
won't affect .bak
files in subdirectories not themselves named .bak
.– Eliah Kagan
Oct 14 '17 at 2:30
@don.joey This answer seems to say
find . -name "*.bak" -type f
displays what trash *.bak
deletes. Is that really what you mean? You can move directories to the trash with trash
or gvfs-trash
, but trash *.bak
will only moves files and directories whose names end with .bak
and that reside immediately in the current directory. The shell expands *.bak
, so trash *.bak
won't affect .bak
files in subdirectories not themselves named .bak
.– Eliah Kagan
Oct 14 '17 at 2:30
1
1
@don.joey Yes
ls *.bak
(which I think you mean) lists what trash *.bak
trashes. find . -name '*.bak' -xtype f -exec trash {} +
trashes all .bak
files anywhere under .
. It can't use an alias, so install trash-cli
or write gvfs-trash
instead. Here's an example. -xtype f
selects files and symlinks to files, but not folders. To delete .bak
folders too, use find . -name '*.bak' -execdir trash {} +
, which avoids cannot trash non existent
errors for .bak
files inside .bak
directories. Please feel free to use any of this in your answer.– Eliah Kagan
Oct 14 '17 at 19:15
@don.joey Yes
ls *.bak
(which I think you mean) lists what trash *.bak
trashes. find . -name '*.bak' -xtype f -exec trash {} +
trashes all .bak
files anywhere under .
. It can't use an alias, so install trash-cli
or write gvfs-trash
instead. Here's an example. -xtype f
selects files and symlinks to files, but not folders. To delete .bak
folders too, use find . -name '*.bak' -execdir trash {} +
, which avoids cannot trash non existent
errors for .bak
files inside .bak
directories. Please feel free to use any of this in your answer.– Eliah Kagan
Oct 14 '17 at 19:15
|
show 2 more comments
up vote
3
down vote
If you want to delete all files of a certain type, but only 1 folder "deep" from the current folder:
find . -maxdepth 2 -name "*.log" -type f -delete
-maxdepth 2 because the current directory "." counts as the first folder.
add a comment |
up vote
3
down vote
If you want to delete all files of a certain type, but only 1 folder "deep" from the current folder:
find . -maxdepth 2 -name "*.log" -type f -delete
-maxdepth 2 because the current directory "." counts as the first folder.
add a comment |
up vote
3
down vote
up vote
3
down vote
If you want to delete all files of a certain type, but only 1 folder "deep" from the current folder:
find . -maxdepth 2 -name "*.log" -type f -delete
-maxdepth 2 because the current directory "." counts as the first folder.
If you want to delete all files of a certain type, but only 1 folder "deep" from the current folder:
find . -maxdepth 2 -name "*.log" -type f -delete
-maxdepth 2 because the current directory "." counts as the first folder.
answered Nov 26 '17 at 17:21
Hypocritus
493
493
add a comment |
add a comment |
up vote
0
down vote
If you are inside a git repo, you can use:
git clean -fdx
This deletes untracked files and files in .gitignore.
add a comment |
up vote
0
down vote
If you are inside a git repo, you can use:
git clean -fdx
This deletes untracked files and files in .gitignore.
add a comment |
up vote
0
down vote
up vote
0
down vote
If you are inside a git repo, you can use:
git clean -fdx
This deletes untracked files and files in .gitignore.
If you are inside a git repo, you can use:
git clean -fdx
This deletes untracked files and files in .gitignore.
answered Aug 9 at 7:38
Vasantha Ganesh K
94212
94212
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f377438%2fhow-can-i-recursively-delete-all-files-of-a-specific-extension-in-the-current-di%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown