16

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?

22

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
  • 1
    Just in case you want an output similar to the ls -l command, showing file size, ownership, date, etc., you can use find with the -ls option, e.g. find . -name \*.pdf -ls – RFVoltolini Aug 1 '16 at 10:48
2

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.

  • 2
    You need to quote your glob to keep it from being prematurely expanded. – Dennis Williamson Feb 15 '11 at 15:43
1

Use find instead of ls

find . -name '*.pdf'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.