0

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

   ls -l | cut -c1-1

因此,通过这种方式,我可以获得每个 ls 命令的第一个字符,然后根据它的内容,记录文件类型,直到列出所有文件。例如,如果我在一个包含一堆文件的文件夹中并从上面执行了剪切命令,它将显示许多“-”权限,表明它是一个文件。

我的问题是,根据上面的命令,我将如何通过每一行 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
4

3 回答 3

4

如何使用findand wc

# 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

于 2013-03-27T16:15:12.973 回答
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"
于 2013-03-27T16:17:27.657 回答
0

将命令输入更多将防止它滚动到屏幕外。

ls -l | cut -c1-1 | more
于 2013-03-27T16:18:47.503 回答