我必须解析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
答案 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)
答案 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\}//'