可以说当我执行ls命令时,输出为:
file1 file2 file3 file4
是否只能显示输出的特定列,在这种情况下为file2?我尝试了以下操作,但均未成功:
echo ls | $2
基本上我只想回显第二列,在这种情况下,我想回显:
file2
ls
,创建一些文件/文件夹后,它可能不再是您想要的。正如Terdon指出的那样,肯定有更好的方法来获得想要的东西
可以说当我执行ls命令时,输出为:
file1 file2 file3 file4
是否只能显示输出的特定列,在这种情况下为file2?我尝试了以下操作,但均未成功:
echo ls | $2
基本上我只想回显第二列,在这种情况下,我想回显:
file2
ls
,创建一些文件/文件夹后,它可能不再是您想要的。正如Terdon指出的那样,肯定有更好的方法来获得想要的东西
Answers:
以下命令会将ls输出格式化为一列
ls -1 /directory
ls -1 /directory | head -2 | tail -1
或ls -1 /directory | perl -ne 'print if $. == 2'
ls | sed -n '1p;q'
似乎更简单
您正在寻找:
ls -C | awk '{ print $2 }'
但是,假设您以后要尝试使用该文件名,请不要这样做,因为它会在包含空格的文件名上中断。相反,将文件放入一个数组中,然后获取第二个文件,这避免了必须进行任何解析:
files=(*)
printf '%s\n' "${files[1]}"
取回文件的顺序取决于的值LC_COLLATE
。因此LC_COLLATE=C
,如果要在所有极端情况下进行“标准”排序,则可能要先设置。
1
以明智的外壳(zsh,yash,fish,csh,tcsh,rc,es ...)开头,而以0
ksh和bash开头。对于可移植到所有类似Bourne的外壳的解决方案,可以使用:set -- *; printf '%s\n' "$2"
代替。
我想你在找
ls -1
它不会显示权限,所有者,组,日期,大小...,而是在单列中显示简单的文件名。
对我而言唯一有效的方法是添加“ -all”。那是:
ls -C -all | awk '{ print $1 }'
因为-all
添加更多列,例如用户,权限等。
假设如果要在当前路径下仅显示特定文件名,请使用以下命令
命令:
find path -maxdepth 1 -iname "filename"|sed "s/\.\///g"
这很棘手,因为解析ls -C
取决于:
ls -C
)ls -C
输出为柱状,但可以配置不同的空间数量作为字段分隔。ls
所选的特定显示选项)。现在,让我们先从简单的问题,(即上面没有#4),假定是有在文件名没有空格。要打印第2列,这可以工作:
COLUMNS=$COLUMNS ls -C | tr -s ' ' '\t' | cut -f2
展开:
COLUMNS=$COLUMNS
确保馈入的列长度|
与当前终端显示保持一致。将此值更改为任意值也可以,因此COLUMNS=50
或COLUMNS=70
将导致ls -C
根据这些宽度重新排列内容。
另一种方法是使用-w
开关,例如:
ls -w${COLUMNS} -C | tr -s ' ' '\t' | cut -f2
tr
使字段分隔符保持一致:每列之间有一个选项卡。
cut
输出所需的列。
ls
输出?