用于目录列表的bash脚本以及额外信息

时间:2011-11-03 08:50:41

标签: bash

我需要知道我可以在bash脚本中使用哪些命令或命令来为我提供这样的目录列表(注意最后的额外行)。

total 24
drwxr-xr-x  2 dshoe users   4096 2010-10-28 18:41   backups
drwxr-xr-x  2 dshoe users   4096 2010-10-28 18:41   bin
drwxr-xr-x  2 dshoe users   4096 2010-10-28 18:41   c_source
drwxr-xr-x  2 dshoe users   4096 2010-10-28 18:41   cgi_files
drwxr-xr-x  2 dshoe users   4096 2010-10-28 18:41   cgi_scripts
drwxr-xr-x  4 dshoe users   4096 2010-10-28 18:41   ny
drwxr-xr-x  2 dshoe users   4096 2010-10-28 18:41   perl
-rw-r--r--  1 dshoe users   1954 2010-10-28 18:41   pers
drwxrwxrwx  2 dshoe users   4096 2010-10-28 18:41   public_html
-rw-r--r--  1 dshoe users   3392 2010-10-28 18:41   sales
-rwxr--r--  1 dshoe users   228  2010-10-28 18:41   sargs
drwx------  2 dshoe users   4096 2010-10-28 18:41   scripts
-rw-r--r--  1 dshoe users   131  2010-10-28 18:41   setup

Total bytes:    17899
Total files:    4
Directories:    9
And scripts:    1

标准ls命令无法执行此操作,因此我想知道我可以在bash脚本中使用什么来实现此目的。

3 个答案:

答案 0 :(得分:1)

您要使用的基本命令是ls -l,但您需要对输出进行后期处理才能获得最后四行。

例如,这里有一个可以获得前三个项目加上第四个项目,我假设它是为所有者设置执行位的常规文件数量:

#!/usr/bin/bash
tmpfile=/tmp/tmpfile.$$
ls -l | tee ${tmpfile}
echo
echo "Total bytes:" $(awk '{sum += $5} END {print sum}' ${tmpfile})
echo "Total files:" $(grep -v '^total ' ${tmpfile} | grep -v '^d' | wc -l)
echo "Directories:" $(grep -v '^total ' ${tmpfile} | grep '^d' | wc -l)
echo "And scripts:" $(grep -v '^total ' ${tmpfile} | grep '^-..x' | wc -l)
rm -f ${tmpfile}

输出:

total 1589
-rwxr-xr-x   1 pax root      57 Oct  3 14:24 Cygwin.bat
-rw-r--r--   1 pax root    7022 Oct  3 14:24 Cygwin.ico
drwxr-xr-x+  1 pax root 1048576 Oct  3 14:20 bin
dr-xr-xr-x   4 pax None       0 Nov  3 17:06 cygdrive
drwxrwxr-x+  1 pax None       0 Oct  3 14:05 dev
drwxr-xr-x+  1 pax root   32768 Oct  3 14:20 etc
drwxrwxrwt+  1 pax root       0 Oct  3 14:13 home
drwxr-xr-x+  1 pax root  524288 Oct  3 14:19 lib
drwxr-xr-x+  1 pax root       0 Oct  3 13:35 opt
dr-xr-xr-x  10 pax None       0 Nov  3 17:06 proc
drwxr-xr-x+  1 pax root       0 Oct  3 13:59 sbin
drwxr-xr-x+  1 pax None       0 Oct  3 14:10 srv
drwxrwxrwt+  1 pax root    4096 Nov  3 17:06 tmp
drwxr-xr-x+  1 pax root    4096 Oct  3 14:10 usr
drwxr-xr-x+  1 pax root    4096 Oct  3 14:20 var

Total bytes: 1624999
Total files: 2
Directories: 13
And scripts: 1

但是,我不完全确定你是如何决定脚本的。如果它与我的假设不同,它仍然可行,你只需要弄清楚实际命令是什么(告诉我们你想要测量什么来获得值)。

答案 1 :(得分:0)

您可以尝试使用以下命令:

$ ls -l

答案 2 :(得分:0)

我想你要找的是: ls -al

相关问题