0

Linuxでシェルスクリプトを作成するのは初めてです。ディレクトリ内のファイル数、ディレクトリ内のディレクトリ数などを一覧表示できるようにしたいと考えています。を使用してこのタスクを実行することにしました

   ls -l | cut -c1-1

このようにして、すべての ls コマンドの最初の文字を取得し、それが何であるかに基づいて、すべてのファイルが一覧表示されるまでファイルの種類を数えます。たとえば、多数のファイルを含むフォルダーにいて、上記のカット コマンドを実行すると、ファイルであることを示す多くの "-" パーミッションが表示されます。

私の質問は、上記のコマンドに基づいて、各 ls 行をどのように通過するのでしょうか? シェルで上記のコマンドを入力すると、それらすべてが一度に表示されるだけです...各 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

findとを使用するのはどうですか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 (word count)を使用して、文字数、単語数、および行数をカウントできます。ここで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

コマンドを more にパイプすると、画面からスクロールしなくなります。

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