コマンドラインからサブディレクトリ内のアイテム数を表示する方法

コマンドラインからサブディレクトリ内のアイテム数を表示する方法

Ubuntu のグラフィカル ユーザー インターフェイスでは、ディレクトリ内のサブディレクトリを一覧表示できます。1 つの列は、これらのサブディレクトリ内の項目の数を表します。次に示すように:

ノーチラスのスクリーンショット

コマンドラインを使用して同じ結果 (サイズ列の項目数) を取得する方法はありますか?

答え1

使用できる小さなシェル関数を以下に示します。次の行を に追加するだけです~/.bashrc:

lsc(){
    ## globs that don't match should expand to a null string
  shopt -s nullglob
  ## If no arguments were given use the current dir
  if [[ $# -eq 0 ]]; then
    targets="."
  ## Otherwise, use whatever was given
  else
    targets=($@)
  fi
  ## iterate over the arguments given
  for target in "${targets[@]}"; do
    ## get the contents of the target
    contents=("$target"/*)
    ## iterate over the contents
    for thing in "${contents[@]}";  do
      ## If this one is a directory
      if [[ -d "$thing" ]]; then
        ## collect the directory's contents
        count=("$thing"/*)
        ## Print the dir's name (with a '/' at the end)
        ## and the number of items found in it
        printf "%s/ (%s)\n" "$thing" "${#count[@]}"
      else
        ## If this isn't a dir, just print the name
        printf "%s\n" "$thing"
      fi
    done
  done
}

次に新しいターミナルを開いて次のコマンドを実行します:

lsc /path/to/dir

たとえば、次のディレクトリがあるとします (\012名前に改行が含まれています)。

$ tree
.
├── a bad one
│   └── file 1
├── a bad worse\012one
│   └── file 1 \012two
├── dir1
│   └── file
├── dir2
│   ├── file1
│   └── file2
├── dir3
│   ├── file1
│   ├── file2
│   └── file3
├── dir4
│   └── dir
├── empty_dir

8 directories, 7 files

次のような結果になります:

$ lsc 
./a bad one/ (1)
./a bad worse
one/ (1)
./dir1/ (1)
./dir2/ (2)
./dir3/ (3)
./dir4/ (1)
./empty_dir/ (0)
./mp3/ (1)

このアプローチの主な利点は次のとおりです。

  1. 複数のディレクトリで実行できます:

    lsc /path/to/dir /path/to/dir2 ... /path/to/dirN
    

    または現在のもの:

    lsc
    
  2. 上記のように、スペースや改行文字を含むファイル名やディレクトリ名でも動作します。

関連情報