通过每个ls线

时间:2013-03-27 16:13:07

标签: linux shell

我是linux中的shell脚本新手。我希望能够列出目录中的文件数,目录中的目录数等等。我决定使用

来完成这项任务
   ls -l | cut -c1-1

因此,我可以获取每个ls命令的第一个字符,然后根据它是什么,保持文件类型的计数,直到列出所有文件。所以一个例子就是如果我在一个包含大量文件的文件夹中并从上面执行cut命令,它会显示许多“ - ”权限,表明它是一个文件。

我的问题是,基于上面的命令,我将如何通过每个ls线?如果我在shell中输入上面的命令,它会立即显示所有这些...我想通过每个ls行。

谢谢!

目录名为Test并包含

 -rw-r--r--  1 teddy  user  31 27 Mar 10:07 test1.txt
 drwx------  1 teddy  user   9 30 Jan 19:18 tooney
 -rw-r--r--  1 teddy  user  31 27 Mar 10:07 test2.txt
 drwx------  1 teddy  user   9  21 Mar 11:32 dirt

3 个答案:

答案 0 :(得分:4)

如何使用findwc

# Find all files in the current directory 
$ find . -maxdepth 1 -type f | wc -l

# Find all directories in the current directory 
$ find . -maxdepth 1 -type d | wc -l

命令wc (字数)可用于计算字符,单词和行的数量。此处wc -l计算find的结果输出的行数。

答案 1 :(得分:3)

使用您的方法,您可以使用uniq计算总计,例如:

$ ls -l | cut -c1-1 | sort | uniq -c
    214 -
     13 d
      2 l
      1 t

uniq -c计算一行的连续出现次数,而sort只是将它们放入某个排序顺序,以便相同的类型最终结合在一起。

如果您希望将这些结果放入变量中,那么这将更容易:

dirs=0
files=0

for name in *
do
    if [[ -d "$name" ]]
    then
        ((dirs++))
    elif [[ -f "$name" ]]
    then
        ((files++))
    # Possibly other things you want to count ...
    fi
done

echo "Files: $files"
echo "Directories: $dirs"

答案 2 :(得分:0)

将命令管道输入更多将使其不会滚动离开屏幕。

ls -l | cut -c1-1 | more