Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place! |
Notices |
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
|
|
|
02-27-2017, 04:53 PM
|
#1
|
Member
Registered: Mar 2009
Distribution: Bedrock, Devuan, Slackware, Linux From Scratch, Void
Posts: 672
Rep:
|
deleting *all* in current directory (bash)
While I am not really a newb any more, this question seems newbie-ish to me so here it goes...
In a directory, if one types, "rm -rf *", everything is removed ... except for directories and files beginning with ".".
If one types "rm -rf ." again, one gets an error message and as before, directories and files beginning with "." are not deleted.
Short of a kludge involving sub-shells and the use of find, is there a good simple safe way to have the effect of "rm -rf" in the current directory *plus* the removal of files beginning with "."?
Thank you.
|
|
|
02-27-2017, 05:03 PM
|
#2
|
Senior Member
Registered: Sep 2010
Location: Lawrence, New Zealand
Distribution: Slackware
Posts: 1,077
|
First of all, I don't recommend the direct use of `rm`. I think it's a dangerous tool that should be avoided in favour of a good command line trash application, like trashy or trash-cli.
That said, you're looking for some expansion. Using `ls` instead of `rm` for copy-pasta safety:
That's a brace, dot, comma, brace, asterisk. It means anything with a dot, or anything with nothing.
|
|
|
02-27-2017, 05:08 PM
|
#3
|
LQ Guru
Registered: Nov 2008
Location: Pictland
Distribution: Linux Mint 21 MATE
Posts: 8,048
|
If you're using Bash:
shopt -s dotglob
ensures that the * glob will subsequently match both unhidden and hidden files.
|
|
2 members found this post helpful.
|
02-27-2017, 05:21 PM
|
#4
|
LQ Veteran
Registered: Jan 2011
Location: Abingdon, VA
Distribution: Catalina
Posts: 9,374
Rep:
|
I have similar trouble with this particular situation muh damn self.
I check my shit with
b/c one rm is too many only "once".
Just sayin'
|
|
1 members found this post helpful.
|
02-27-2017, 05:30 PM
|
#5
|
Senior Member
Registered: Mar 2004
Location: UK
Distribution: CentOS 6/7
Posts: 1,375
|
don't use rm for this, use find
Code:
# mkdir -p test/test
# echo "test" > test/.test.txt
# echo "test" > test/test.txt
# echo "test" > test/test/test.txt
# cd test
# find . -type f
./test/test.txt
./.test.txt
./test.txt
# find . -maxdepth 1 -type f
./.test.txt
./test.txt
# find . -maxdepth 1 -type f -delete
# find . -type f
./test/test.txt
# find . -type f -delete
# find . -type f
Find has more predictable behavior here, so I would say it is my preferred option. maxdepth can be used if you don't want to delete anything in any subdirectories. Else it'll catch all files in all subdirectories too.
Last edited by r3sistance; 02-27-2017 at 05:37 PM.
Reason: including maxdepth
|
|
|
02-28-2017, 04:32 AM
|
#6
|
Member
Registered: Jun 2016
Distribution: any&all, in VBox; Ol'UnixCLI; NO GUI resources
Posts: 999
|
* .??*
Yes, be careful with this (I just accidentally deleted my .bashrc in experimenting with this)!
For quick simplicity, I add/use: .??*
Tho/but that will not get -single_letter- 'hidden' files, like .a
To check if there's any such [1letter dot-files], I then do: ls -d .?
Take a few minutes to look into the -d and how `echo` acts 'like' a `ls -d`
An important point here is to NOT 'hit' [match in `rm`] . and ..
(the current dir and it's 'parent')
Getting a bit more 'theoretical' here, note how .?* works
(-different- than in grep/regex!)
? matches any one character; * any zero or more; . a dot itself
echo .?*
Last edited by Jjanel; 02-28-2017 at 05:02 AM.
|
|
|
02-28-2017, 05:53 AM
|
#7
|
Senior Member
Registered: Dec 2012
Location: Washington DC area
Distribution: Fedora, CentOS, Slackware
Posts: 4,912
|
I tend to use:
rm -rf .[a-zA-Z0-9]*
or just
rm -rf .[a-z]*
|
|
1 members found this post helpful.
|
02-28-2017, 06:16 AM
|
#8
|
LQ Addict
Registered: Mar 2012
Location: Hungary
Distribution: debian/ubuntu/suse ...
Posts: 22,733
|
just:
Code:
cd ..
rm -rf <dir>
mkdir <dir>
|
|
3 members found this post helpful.
|
02-28-2017, 11:18 PM
|
#9
|
Member
Registered: Jun 2016
Distribution: any&all, in VBox; Ol'UnixCLI; NO GUI resources
Posts: 999
|
Oh, it helps to ReallyRead#1
Quote:
a good simple safe way to have the effect of "rm -rf" in the current directory *plus* the removal of files beginning with "."?
|
While I realized #7 was more accurate than my #6, this #8 is *pure perfect GENIUS*
(I was about to suggest: cd ..; rm -fir $OLDPWD; mkdir $OLDPWD; cd $OLDPWD
but then realized that 'esoterically theoretical' != 'good simple safe' )
OP, can you please use ThreadTools at top, to mark this thread as "[SOLVED]". Thanks!
Last edited by Jjanel; 02-28-2017 at 11:37 PM.
|
|
|
03-01-2017, 12:40 AM
|
#10
|
LQ Muse
Registered: Aug 2005
Location: A2 area Mi.
Posts: 17,639
|
use " srm" it may or may not be installed but the source is on sourceforge
https://sourceforge.net/projects/srm/files/
BUT as always use CAUTION
|
|
|
03-01-2017, 07:02 AM
|
#11
|
LQ Veteran
Registered: Jan 2011
Location: Abingdon, VA
Distribution: Catalina
Posts: 9,374
Rep:
|
|
|
|
03-01-2017, 05:38 PM
|
#12
|
Member
Registered: Mar 2009
Distribution: Bedrock, Devuan, Slackware, Linux From Scratch, Void
Posts: 672
Original Poster
Rep:
|
Wow, not as simple a question as I had thought. Thank you, everyone, for the replies.
Now at some point, when I feel brave, to pick which method to try first.
|
|
|
03-01-2017, 05:40 PM
|
#13
|
Member
Registered: Mar 2009
Distribution: Bedrock, Devuan, Slackware, Linux From Scratch, Void
Posts: 672
Original Poster
Rep:
|
Quote:
Originally Posted by Jjanel
OP, can you please use ThreadTools at top, to mark this thread as "[SOLVED]". Thanks!
|
Is it solved? I have to figure out each of the replies now and then attempt things etc. before such a determination can be made. Why the rush?
|
|
|
03-01-2017, 05:53 PM
|
#14
|
Senior Member
Registered: Aug 2009
Distribution: Rocky Linux
Posts: 4,792
|
Quote:
Originally Posted by jr_bob_dobbs
Wow, not as simple a question as I had thought.
|
No, not simple at all unless you make use of the shell's " dotglob" option. Without that, to get everything:
Code:
rm -r .[^.]* ..?* *
The first matches every name that begins with a dot followed by any character except a dot. The second matches any name that begins with " .." followed by at least one more character. The final " *" matches all the non-dot files. It's messy enough to make you at least consider something else.
|
|
|
03-01-2017, 09:40 PM
|
#15
|
LQ Muse
Registered: Aug 2005
Location: A2 area Mi.
Posts: 17,639
|
that is why i like " srm "
Code:
srm -h
Usage: srm [OPTION]... [FILE]...
Overwrite and remove (unlink) the files. By default use the 35-pass Gutmann
method to overwrite files.
-d, --directory ignored (for compatability with rm(1))
-f, --force ignore nonexistant files, never prompt
-i, --interactive prompt before any removal
-x, --one-file-system do not cross file system boundaries
-s, --simple overwrite with single pass using 0x00 (default)
-P, --openbsd overwrite with three passes like OpenBSD rm
-D, --dod overwrite with 7 US DoD compliant passes
-E, --doe overwrite with 3 US DoE compliant passes
-G, --gutmann overwrite with 35-pass Gutmann method
-C, --rcmp overwrite with Royal Canadian Mounted Police passes
-r, -R, --recursive remove the contents of directories
-v, --verbose explain what is being done
-h, --help display this help and exit
-V, --version display version information and exit
---------
this removes everything in that forled including folders and uses a 1 overwrite of ZEROS
example
|
|
|
All times are GMT -5. The time now is 06:48 PM.
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|