이름과 번호가 같은 모든 파일 나열

이름과 번호가 같은 모든 파일 나열

이름과 파일 수가 동일한 모든 파일을 나열하는 간단한 명령이 있는지 궁금합니다. 나는 이 작업을 재귀적으로 수행하고 싶습니다. 특정 파일 이름을 의미하는 것은 아닙니다. 출력은 다음과 같을 것이라고 상상할 수 있습니다.

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

관련 정보