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