# Making ls output like dir /b /s

How can I tweak the output of `ls` in Linux so that it looks like the output of the command `dir /b /s` in Windows?

`dir /b /s` output as follows:

``````C:\MinGW>dir /s /b
C:\MinGW\COPYING
C:\MinGW\COPYING.LIB
C:\MinGW\doc
C:\MinGW\include
``````
-

## migrated from stackoverflow.comJul 4 '10 at 20:23

This question came from our site for professional and enthusiast programmers.

``````find . -print
``````

This should produce the same output as `dir /s/b`

-
Not quite. The paths are displayed relative to `.`, not `/`. `find BACKTICKpwdBACKTICK -print` would work. But that's a bit more complicated than just using `ls` and I don't think exact conformance to `dir`'s output format is a strict requirement. –  sepp2k Jul 4 '10 at 20:33
@sepp2k: Given your last sentence, I'm confused why you point out the first. Find is a generally much more useful tool than ls for cases similar to this. –  Roger Pate Jul 4 '10 at 23:29
@jrtokarz: You don't need the dot or -print, they're the default, so just "find". –  Roger Pate Jul 4 '10 at 23:30
@Roger: I believe the search path is required in most `find` versions (except GNU). –  grawity Jul 5 '10 at 10:19

`ls -R` lists all files and subdirectories recursively. With `ls -R1` you get the same, but only one file per line.

Neither makes the output look exactly like that of `dir /b /s`, but it should be close enough.

-
``````ls -1
``````

or

``````ls -1d "\$PWD"/*
``````
-
`/S` is the dir equivalent of `-R` even if the OP's example output does not make that clear. –  sepp2k Jul 4 '10 at 20:27
`ls -1` does not work recursively (as required). `ls -1R` would work recursively, but its output will look quite different to `dir /s /b` (which shows the absolute paths for each file). `ls -1d "\${PWD}/*` also misses two things: the recursion and matching normal files (your `-d` limits output to directories only). – –  Kurt Pfeifle Jul 5 '10 at 13:22

It depends, how hard the requirement is to get "equivalence" to `dir /b /s`... These ones come pretty close (they'll have no backslashes as directory separator though, and the output order will be a bit different [`dir /b /s` outputs 'sibling' directories first, before diving into each one to show their content]). The second one is just a fallback in case your version `find` doesn't default to `-print` action (most do though):

``````find \$(pwd)
find \$(pwd) -print
``````

UPDATE: I had a typo in above commands originally. I typed curly brackets "{}" instead of round ones "()" how they ought to be. Thanks to grawity for spotting this.

-
It's `\$PWD`, uppercase. –  grawity Jul 5 '10 at 10:20
@grawity: you're right and wrong at the same time. `\$PWD` or `\${PWD}` would return the content of an environment variable (the current directory). This is what you have in mind. `pwd` is a little commandline utility ('print working directory') which also outputs the current directory path. Using it as `\${pwd}` or as `pwd` would return the result of that command, which in this case has the same effect as using `\$PWD`. So my version will definitely work, and your comment was not appropriate in this context. –  Kurt Pfeifle Jul 5 '10 at 10:33
Correction: `\$(pwd)` returns output of `pwd`, and `\${pwd}` returns the value of `\$pwd`. Notice the difference in brackets. –  grawity Jul 5 '10 at 10:43
@grawity: D'oh! You're right of course. (I do it right whenever I need to do it in a shell. Heaven knows why I did it wrong when typing it into the text edit field....) I'll correct my comments so it will not confuse other readers. –  Kurt Pfeifle Jul 5 '10 at 13:13

this seems to work, from the command line:

``````find|awk "/^\.\//{print\"\$PWD\"substr(\\$0,2)}"
``````
-
Why would you not just use `-printf` instead? –  Ignacio Vazquez-Abrams Oct 30 '10 at 10:13
Because I'm new and do things the hard way. I've added this line to my `.bashrc` which seems to do the trick: `alias lsb='find . -printf "\$PWD/%P\n"'` Is this what you mean? Thanks for the tip! –  erik Oct 30 '10 at 20:02