如何在 ls -Al 中仅输出文件名(带空格)?

如何在 ls -Al 中仅输出文件名(带空格)?

我应该仅回显具有以下结构的文件或目录的名称:

ls -Al | while read string
do
...
done

ls -Al输出 :

drwxr-xr-x  12 s162103  studs         12 march 28 12:49 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 | while read string
do
echo "$string" | awk '{print $9}
done

然后仅输出不带空格的文件和目录。如果文件或目录有“个人域”之类的空格,则只会是“个人”一词。

我需要非常简单的解决方案。也许有比 awk 更好的解决方案。

答案1

真的不应该解析输出ls。如果这是一项家庭作业并且您被要求这样做,那么您的教授不知道他们在说什么。你为什么不做这样的事情:

好的...

find ./  -printf "%f\n"

或者

for n in *; do printf '%s\n' "$n"; done

...坏的...

如果你真的真的想要使用ls,您可以通过执行以下操作使其更加健壮:

ls -lA | awk -F':[0-9]* ' '/:/{print $2}'

……还有丑陋的

如果你坚持如果以错误、危险的方式执行此操作并且只需要使用循环while,请执行以下操作:

ls -Al | while IFS= read -r string; do echo "$string" | 
    awk -F':[0-9]* ' '/:/{print $2}'; done

但说真的,只是不要。

答案2

有什么原因ls -A1* 不起作用吗?

例如:

$ touch file1 file2 file\ with\ spaces
$ ls -Al
total 0
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file1
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file2
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file with spaces
$ ls -A1
file1
file2
file with spaces
$

* 注意:这是大写字母 A 和数字 1。

答案3

我想知道为什么没有人提到这个简单的命令:

ls -a | sort

答案4

您可以使用:

ls -lA | awk '{print $9}' 

如果您碰巧没有任何名称中带有空格的文件,它将起作用......否则,可能会使用稍微复杂的方法:

ls -lA | awk '{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0;}

相关内容