I Tried to delete files that starts with A and ends with 2 numbers but It doesn't do a thing.
What I tried:
rm ^A*[0..9]2$
Where am I wrong?
I Tried to delete files that starts with A and ends with 2 numbers but It doesn't do a thing.
What I tried:
rm ^A*[0..9]2$
Where am I wrong?
You can use the following command to delete all files matching your criteria:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
How it works:
ls lists all files (one by line since the result is piped).
grep -P "^A.*[0-9]{2}$" filters the list of files and leaves only those that match the regular expression ^A.*[0-9]{2}$
.* indicates any number of occurrences of ., where . is a wildcard matching any character.
[0-9]{2} indicates exactly two occurrences of [0-9], that is, any digit.
xargs -d"\n" rm executes rm line once for every line that is piped to it.
Where am I wrong?
For starters, rm doesn't accept a regular expression as an argument. Besides the wildcard *, every other character is treated literally.
Also, your regular expression is slightly off. For example, * means any occurrences of ... in a regular expression, so A* matches A, AA, etc. and even an empty string.
For more information, visit Regular-Expressions.info.
Or using find:
find your-directory/ -name 'A*[0-9][0-9]' -delete
This solution will deal with weird file names.
-type f
– Marco Sulla
Jun 08 '16 at 08:12
xargs approach with rm -f.
– cYrus
Sep 09 '17 at 13:54
find command works with regexes as well.
Check which files are gonna to be deleted
find . -regex '^A.*[0-9]{2}$'
Delete files
find . -regex '^A.*[0-9]{2}$' -delete
-regextype egrep to make {x,y} type quantifiers work.
– Gergely Lukacsy
Jul 10 '20 at 15:05
The solution with regexp is 200 times better, even with that you can see which file will be deleted before using the command, cutting off the final pipe:
ls | grep -P "^A.*[0-9]{2}$"
Then if it's correct just use:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm
This is 200 times better because if you work with Unix it's important to know how to use grep. It's very powerful if you know how to use it.
-d"\nswitch fixes the spaces problem. – Frg Feb 22 '12 at 19:14grep -P(Perl regex).grep -Emay work in this case. – bluescrubbie Oct 02 '13 at 20:59-Iwithxargsand always test with non-lethal commands first:xargs -d"\n" -I {} echo "{}"– jozxyqk Mar 24 '14 at 05:40ls? See this question which points to this article. Because of the pitfalls you mayrmwhat you don't want to. – Kamil Maciorowski Nov 15 '16 at 11:57lsorgrepaliased with--color=alwaysoption and you will need to do\ls | \grep ...– αғsнιη Oct 12 '18 at 04:42finddoes all this in one command. – qwr Feb 25 '20 at 21:58