我应该仅回显具有以下结构的文件或目录的名称:
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;}