Linux - GeneralThis Linux forum is for general Linux questions and discussion.
If it is Linux Related and doesn't seem to fit in any other forum then 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.
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.
Hi,
I have generated a list of directories that I would like to use ls and grep on, but it is not working. I am using the command
Code:
cat directories.dat | xargs ls
and I get a whole lot of these errors:
Code:
ls: cannot access ./foo/bar/baz/grault/*: No such file or directory
but when I try the directories manually one at a time I find that they all exist and all have files in them. Same thing if I try to grep anything. What is going wrong?
The contents of the file and the working directory are fine. Just to clarify, if I run my xargs piped command I get
Code:
ls: cannot access ./foo/bar/baz/grault/*: No such file or directory
and lots more errors of the same sort, but then (without changing my working directory) if I type
Code:
ls ./foo/bar/baz/grault/*
it works just fine. I can't work out why. I've also tried changing the contents of the file so that the directories are given in full rather than with the ./ prefix, but that doesn't help.
(edit) I created the file using gawk. Could this have added some invisible delimiters or something that ls is choking on?
Last edited by TheBigH; 04-03-2011 at 06:12 PM.
Reason: a thought
Why not use a loop instead of xargs? The xargs has some limitations
that you won't experience using a loop. For example:
Code:
cat directories.dat | while read Dir; do ls "$Dir"; done
Also you don't mention anything about special characters. The * is
interpreted and possibly expanded into a set of files. If you have
space characters, tabs, slashes, back-slashes, question marks or
ampersands in any of the paths they will also be interpreted.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.