名前と番号が同じファイルをすべて一覧表示

名前と番号が同じファイルをすべて一覧表示

名前とファイル数が同じすべてのファイルを一覧表示する単純なコマンドがあるかどうか疑問に思います。私はこれを再帰的に実行したいと思います。特定のファイル名を意味するわけではありません。出力は次のようになると想像できます。

FILENAME   NUMBER
filename1    2
filename2    4
filename3    8 

答え1

GNUの使用find:

find /some/path -type f -printf '%f\n' | sort | uniq -c

POSIXの使用find:

find /some/path -type f | sed 's~^.*/~~' | sort | uniq -c

これは、ファイル名に改行文字が含まれていないと仮定します。

答え2

同じディレクトリに同じ名前のファイルを含めることはできないため、異なるディレクトリ(フォルダ1 / filefolder2 / filefolder1 / otherfilefolder2 / otherfileなど)にあるとします。

for name in NAME1 NAME2 NAME3 ; do
    echo -n $name \ \ \ 
    ls */$name | wc -l 
done

同じプレフィックス(例:picture1 picture2フレーム1フレーム2)のみがある場合、ほぼ同じです。

for name in NAME1 NAME2 NAME3 ; do
    echo -n $name \ \ \ 
    ls $name* | wc -l
done

タイトルが内容全体の直前にあるので

echo FILENAME \ \ \ \ NUMBER

(もちろんBASHスクリプト)


[コメントで次のリクエストを更新:]

#!/bin/bash

  # alternative 1
  # put filenames sorted and without double entries into array fnames
  fnames=( $( find -type f -printf "%f\n" | sort | uniq ) )
  # alternative 2: including folder names:
  ## fnames=( $( find -printf "%f\n" | sort | uniq ) )

  # count each names number of appearances:

  for (( i=0 ; i<=${#fnames[@]}-1 ; i++ )) ; do
    # alternative 1: files only
    number=$( find -type f -wholename "*/${fnames[$i]}" -printf "%f\n" | wc -l )
    # alternative 2: files and folders with same name
    ## number=$( find -wholename "*/${fnames[$i]}" -printf "%f\n" | wc -l )

    echo -e ${fnames[$i]} \ \ \ $number

  done

関連情報