Recursive ls with conditions
Why can't I use a command like this to find all the pdf files in a directory and subdirectories? How do I do it? (I'm using bash in ubuntu)
ls -R *.pdf
EDIT
How would I then go about deleting all these files?
Solution 1:
Why can't I use a command like this to find all the pdf files in a directory and subdirectories?
The wildcard *.pdf
in your command is expanded by bash
to all matching files in the current directory, before executing ls
.
How do I do it? (I'm using bash in ubuntu)
find is your answer.
find . -name \*.pdf
is recursive listing of pdf files. -iname
is case insensitive match, so
find . -iname \*.pdf
lists all .pdf files, including for example foo.PDF
Also, you can use ls for limited number of subfolders, for example
ls *.pdf */*.pdf
to find all pdf files in subfolders (matches to bar/foo.pdf, not to bar/foo/asdf.pdf, and not to foo.PDF).
If you want to remove files found with find, you can use
find . -iname \*.pdf -delete
Solution 2:
Use find instead of ls
find . -name '*.pdf'
Solution 3:
As others have said, find is the answer.
Now to answer the other part.
-
How would I then go about deleting all these files?
find . -iname *.pdf -exec rm {} \;
Should do it.