■分散されたmp4ファイルの先頭の文字で集計をしてみる。 findで渡すファイル名のワイルドカードを、 どこまで絞ったら良さそうかの目安がわかるだけで、 特に実用性は無い。 $ lsb_release -d Description: Debian GNU/Linux 10 (buster) ■カレントやマウントしたディスクにざっくり8千ほどある。 今回は各ディスク毎ではなく、あくまで全体を集計する。 $ find /media/ ./ -type f -name "*.mp4" | wc -l 8297 ■デフォルトではmawk 1.3.3-17+b3。gawkもあるが今回はmawkだけで処理する。 $ ls -l /usr/bin/awk lrwxrwxrwx 1 root root 21 6月 2 11:56 /usr/bin/awk -> /etc/alternatives/awk $ ls -l /etc/alternatives/awk lrwxrwxrwx 1 root root 13 6月 2 11:56 /etc/alternatives/awk -> /usr/bin/mawk $ dpkg -l | awk '$1 ~ /ii/&&$2 ~/awk/{print $2,$3}' mawk 1.3.3-17+b3 $ apt-file search bin/gawk gawk: /usr/bin/gawk ■[A-Za-z0-9]以外のファイル名が1508コあるが、今回は対象外とする。 $ SEARCH="/media/ ./"; \ find /media/ ./ -type f -name "*.mp4" | env -i awk -F\/ '$NF !~ /^[A-Za-z0-9]/{a++}END{print a}' 1508 ■mawkでは日本語がうまく扱えないので、[A-Za-z0-9]でフィルタする。 また、小文字も大文字に変換して統一の上、集計する。 $ SEARCH="/media/ ./"; \ find ${SEARCH} -type f -name "*.mp4" | \ env -i awk -F\/ '{a[substr(toupper($NF),1,1)]+=1}END{for(n in a){if(n ~ /[A-Za-z0-9]/){print n,a[n] | "sort -uV"}}}'; \ unset SEARCH 0 8 1 205 2 4 3 33 4 5 5 6 6 1 7 5 8 2 9 3 A 320 B 157 C 397 D 210 E 90 F 633 G 195 H 751 I 308 J 96 K 254 L 75 M 788 N 180 O 159 P 185 Q 1 R 198 S 882 T 277 U 34 V 59 W 74 X 88 Y 43 Z 63 ■ファイル数が100未満のリストを抽出。 $ SEARCH="/media/ ./"; \ find ${SEARCH} -type f -name "*.mp4" | \ env -i awk -F\/ '{a[substr(toupper($NF),1,1)]+=1}END{for(n in a){if(n ~ /[A-Za-z0-9]/) \ {if(a[n]<99){print n,a[n] | "sort -uV"}}}}'; \ unset SEARCH 1 1 A 48 B 26 C 6 D 35 E 5 F 24 G 16 H 53 I 54 J 18 K 27 L 11 M 31 N 25 O 14 P 15 R 13 S 91 T 19 U 4 V 6 W 20 X 11 Y 2 Z 3 ■ファイル数が100以上のリストを抽出。 $ SEARCH="/media/ ./"; \ find ${SEARCH} -type f -name "*.mp4" | \ env -i awk -F\/ '{a[substr(toupper($NF),1,1)]+=1}END{for(n in a){if(n ~ /[A-Za-z0-9]/) \ {if(a[n]>99){print n,a[n] | "sort -uV"}}}}'; \ unset SEARCH 1 205 A 320 B 157 C 396 D 210 F 633 G 195 H 751 I 308 K 254 M 788 N 180 O 159 P 185 R 198 S 883 T 277 ■以下条件で先頭3文字で集計してみる。 $ SEARCH="/media/ ./"; \ find ${SEARCH} -type f -name "*.mp4" | \ env -i awk -F\/ '{a[substr(toupper($NF),1,1)]+=1}END{for(n in a){if(n ~ /[A-Za-z0-9]/) \ {if(a[n]>99){print n | "sort -uV"}}}}' | tr -d '\n';echo; \ unset SEARCH 1ABCDFGHIKMNOPRST $ SEARCH="/media/ ./"; \ find ${SEARCH} -type f -name "*.mp4" | \ env -i awk -F\/ '{a[substr(toupper($NF),1,3)]+=1}END{for(n in a){if(n ~ /[1ABCDFGHIKMNOPRST][A-Za-z0-9][A-Za-z0-9]/) \ {if(a[n]>99){print n,a[n] | "sort -uV"}}}}'; \ unset SEARCH 1PP 107 CAN 194 FOR 575 HAK 225 HOU 156 RAC 100 TOK 134