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