I’ve traditionally used ls -C
to get multi-column format. If I pipe the output through another command (e.g., less
), I need ls -C
to override the default single-column format. For some reason, I’m finding right now that it sometimes gives single-column output, and sometimes multi-column output but assumes a narrow window.
Why doesn’t ls -C
produce multi-column output and how can I get the multi-column output from ls *
into stdout
?
I am using Cygwin’s mintty
. The information about the screen width is accurate:
$ echo $COLUMNS
192
Below are the results of ls *
, ls -C *
, and ls -C *
applied to each top level subfolder individually.
With my mintty
at 192 columns full screen, ls *
produces the desired format:
Administrator@LAPTOP-XXXXXXX /c/Users
$ ls * # Same formatted output with ls -C *
'All Users'@ 'Default User'@ desktop.ini*
Administrator:
'3D Objects'/ Downloads/ 'My Documents'@ Pictures/ 'Start Menu'@
AppData/ Favorites/ NTUSER.DAT* PrintHood@ Templates@
'Application Data'@ IntelGraphicsProfiles/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf* Recent@ Videos/
Contacts/ Links/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms* Roaming/ ntuser.dat.LOG1*
Cookies@ 'Local Settings'@ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms* 'Saved Games'/ ntuser.dat.LOG2*
Desktop/ MicrosoftEdgeBackups/ NetHood@ Searches/ ntuser.ini*
Documents/ Music/ OneDrive/ SendTo@
Default:
AppData/ 'My Documents'@ NetHood@
'Application Data'@ NTUSER.DAT* Pictures/
Cookies@ NTUSER.DAT.LOG1* PrintHood@
Desktop/ NTUSER.DAT.LOG2* Recent@
Documents/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf* Roaming/
Downloads/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms* 'Saved Games'/
Favorites/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms* SendTo@
Links/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf* 'Start Menu'@
'Local Settings'@ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms* Templates@
Music/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms* Videos/
Public:
AccountPictures/ Desktop/ Documents/ Downloads/ 'Foxit Software'/ Libraries/ Music/ Pictures/ Roaming/ Symantec/ Videos/ desktop.ini* tmp/
User1:
'3D Objects'/ Documents/ Music/ NetHood@ 'Saved Games'/ ntuser.dat.LOG1*
AppData/ Downloads/ 'My Documents'@ OneDrive/ Searches/ ntuser.dat.LOG2*
'Application Data'@ Favorites/ NTUSER.DAT* Pictures/ SendTo@ ntuser.ini*
Contacts/ IntelGraphicsProfiles/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf* PrintHood@ 'Start Menu'@
Cookies@ Links/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms* Recent@ Templates@
Desktop/ 'Local Settings'@ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms* Roaming/ Videos/
User2:
'3D Objects'/ Documents/ Music/ OneDrive/ SendTo@
Anaconda3/ Downloads/ 'My Documents'@ Pictures/ 'Start Menu'@
AppData/ Favorites/ NTUSER.DAT* PrintHood@ Templates@
'Application Data'@ IntelGraphicsProfiles/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf* Recent@ Videos/
Contacts/ Links/ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms* Roaming/ ntuser.dat.LOG1*
Cookies@ 'Local Settings'@ NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms* 'Saved Games'/ ntuser.dat.LOG2*
Desktop/ MicrosoftEdgeBackups/ NetHood@ Searches/ ntuser.ini*
If I pipe the output through anything, e.g., cat
, this is what I get single-column instead instead:
Administrator@LAPTOP-XXXXXXX /c/Users
$ ls -C * | cat
All Users@ Default User@ desktop.ini*
Administrator:
3D Objects/
AppData/
Application Data@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
IntelGraphicsProfiles/
Links/
Local Settings@
MicrosoftEdgeBackups/
Music/
My Documents@
NTUSER.DAT*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NetHood@
OneDrive/
Pictures/
PrintHood@
Recent@
Roaming/
Saved Games/
Searches/
SendTo@
Start Menu@
Templates@
Videos/
ntuser.dat.LOG1*
ntuser.dat.LOG2*
ntuser.ini*
Default:
AppData/
Application Data@
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
Local Settings@
Music/
My Documents@
NTUSER.DAT*
NTUSER.DAT.LOG1*
NTUSER.DAT.LOG2*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NetHood@
Pictures/
PrintHood@
Recent@
Roaming/
Saved Games/
SendTo@
Start Menu@
Templates@
Videos/
Public:
AccountPictures/ Downloads/ Music/ Symantec/ tmp/
Desktop/ Foxit Software/ Pictures/ Videos/
Documents/ Libraries/ Roaming/ desktop.ini*
User1:
3D Objects/
AppData/
Application Data@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
IntelGraphicsProfiles/
Links/
Local Settings@
Music/
My Documents@
NTUSER.DAT*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NetHood@
OneDrive/
Pictures/
PrintHood@
Recent@
Roaming/
Saved Games/
Searches/
SendTo@
Start Menu@
Templates@
Videos/
ntuser.dat.LOG1*
ntuser.dat.LOG2*
ntuser.ini*
User2:
3D Objects/
Anaconda3/
AppData/
Application Data@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
IntelGraphicsProfiles/
Links/
Local Settings@
MicrosoftEdgeBackups/
Music/
My Documents@
NTUSER.DAT*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NetHood@
OneDrive/
Pictures/
PrintHood@
Recent@
Roaming/
Saved Games/
Searches/
SendTo@
Start Menu@
Templates@
Videos/
ntuser.dat.LOG1*
ntuser.dat.LOG2*
ntuser.ini*
I get a hybrid of the the single- and multi-column output if I ls
each file/folder individually and pipe it to cat
(if I don’t pipe to cat
, I get the desired multi-column output formatted for width 192).
for file in *
do
echo ' '
echo $file
ls -C "$file"
done | cat
Administrator
3D Objects/
AppData/
Application Data@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
IntelGraphicsProfiles/
Links/
Local Settings@
MicrosoftEdgeBackups/
Music/
My Documents@
NTUSER.DAT*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NetHood@
OneDrive/
Pictures/
PrintHood@
Recent@
Roaming/
Saved Games/
Searches/
SendTo@
Start Menu@
Templates@
Videos/
ntuser.dat.LOG1*
ntuser.dat.LOG2*
ntuser.ini*
All Users
All Users@
Default
AppData/
Application Data@
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
Local Settings@
Music/
My Documents@
NTUSER.DAT*
NTUSER.DAT.LOG1*
NTUSER.DAT.LOG2*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NetHood@
Pictures/
PrintHood@
Recent@
Roaming/
Saved Games/
SendTo@
Start Menu@
Templates@
Videos/
Default User
Default User@
Public
AccountPictures/ Downloads/ Music/ Symantec/ tmp/
Desktop/ Foxit Software/ Pictures/ Videos/
Documents/ Libraries/ Roaming/ desktop.ini*
User1
3D Objects/
AppData/
Application Data@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
IntelGraphicsProfiles/
Links/
Local Settings@
Music/
My Documents@
NTUSER.DAT*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NetHood@
OneDrive/
Pictures/
PrintHood@
Recent@
Roaming/
Saved Games/
Searches/
SendTo@
Start Menu@
Templates@
Videos/
ntuser.dat.LOG1*
ntuser.dat.LOG2*
ntuser.ini*
<...This is a blank line, I have no idea why it is here...>
desktop.ini
desktop.ini*
User2
3D Objects/
Anaconda3/
AppData/
Application Data@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
IntelGraphicsProfiles/
Links/
Local Settings@
MicrosoftEdgeBackups/
Music/
My Documents@
NTUSER.DAT*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TM.blf*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000001.regtrans-ms*
NTUSER.DAT{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.TMContainer00000000000000000002.regtrans-ms*
NetHood@
OneDrive/
Pictures/
PrintHood@
Recent@
Roaming/
Saved Games/
Searches/
SendTo@
Start Menu@
Templates@
Videos/
ntuser.dat.LOG1*
ntuser.dat.LOG2*
ntuser.ini*