【发布时间】:2015-03-10 14:31:02
【问题描述】:
当您在命令行上调用 ls 而没有其他选项时,每行都会有多个条目。
人为的例子:
$ ls mydir/*.tar.gz
mydir/foo.tar.gz mydir/bar.tar.gz mydir/baz.tar.gz
但是如果你想以某种方式修改输出,你会得到每行一个条目:
$ ls mydir/*.tar.gz | sed "s/\.tar\.gz//g"
mydir/foo
mydir/bar
mydir/baz
有很多条目,这变得很麻烦——我想要多个对齐的列。
我试图想出类似于find mydir -name "*.tar.gz" -printf ...,或... -exec ...,甚至(yuk!)for file in $(find ...) 的东西,但我能想出的任何东西都让人觉得很不雅(想想反变量,取模,只是猜测终端宽度......)。
是否有一些优雅的方法可以在多列输出中获取几个文件名,例如在对它们进行修补后(例如 sed、basename 等)?
【问题讨论】:
-
因为很容易漏掉:关键词是"after have tinkered with them",意思是分栏必须在later,after修改
ls的输出,所以ls根据定义本身不能提供它。接受的答案说明了这一点(通过提供通用的分栏解决方案),而这里的其他答案包括如何让lsitself 分栏。
标签: bash multiple-columns ls