shell必须解析ls -Al输出并获取最后一个字段(文件或目录名)ANY SOLUTION

时间:2013-03-30 18:25:57

标签: linux bash shell unix scripting

我必须解析ls -Al output并获取文件或目录名

ls -Al输出:

drwxr-xr-x  12 s162103  studs         12 march 28 2012 personal domain
drwxr-xr-x   2 s162103  studs          3 march 28 22:32 public_html
drwxr-xr-x   7 s162103  studs          8 march 28 13:59 WebApplication1

我应该只使用ls -Al | <something>

例如:

ls -Al | awk '{print $8}'

但这不起作用,因为$8不是名称,如果目录名中有空格,则它是名称的一部分。也许有一些实用程序削减姓氏或删除任何东西之前?我需要找到任何解决方案。请帮助!

编辑:我知道什么解析ls -Al是个坏主意,但我应该用上面的结构解析它!无法使用像这样的东西

for f in *; do
    somecommand "$f"
done

5 个答案:

答案 0 :(得分:3)

如果您需要的只是文件名,请不要解析ls -Al

您可以将所有文件名放在一个数组中:

files=( * )

或者您可以直接迭代文件:

for f in *; do
    echo "$f"
done

如果您需要ls中的特定内容,请更新您的问题以指定您需要的内容。

答案 1 :(得分:3)

这个ls -Al |awk '{$1=$2=$3=$4=$5=$6=$7=$8="";print $0}'怎么样 我知道这是一个便宜的技巧但是因为你不想使用ls -Al以外的任何东西我不能想得更好......

答案 2 :(得分:2)

根据评论的@ squiguy请求,我发表评论作为答案:

这是怎么回事?

  ls -1A

而不是l(L,字母),1(一个,数字)。它只会列出文件的名称。

答案 3 :(得分:1)

值得注意的是find可以做你想要的事情:

此目录中的所有内容,相当于ls

find . -maxdepth 1

递归地,类似于ls -R

find .

仅限给定目录中的目录:

find /path/to/some/dir -maxdepth 1 -type d

md5sum每个常规文件:

find . -type f -exec md5sum {} \;

答案 4 :(得分:0)

希望awk适合你:

ls -Al | awk 'NR>1{for(i=9;i<NF;i++)printf $i" ";print $i}'

如果您对sed感兴趣:

ls -Al | sed '1d;s/^\([^ ]* *\)\{8\}//'