請關于Shell命令的小問題。
我有一個頂級檔案夾,其中包含不同型別的擴展檔案。例如,該檔案夾包含檔案 .java、.xml 等...
在這個頂級檔案夾下,它還包含底層檔案夾、子檔案夾,它們本身包含相同和/或其他型別的檔案,以及可能的其他子檔案夾。
我只是想列出頂級檔案夾下的所有檔案型別,一直向下。
我嘗試使用命令 find,但它要求我提前知道所有型別,而我不知道。
請問,獲取所有型別檔案的正確命令是什么?
預期的結果輸出如下:
- .java
- .xml
- .png
(如果可能的話,用計數,但如果沒有,完全可以)
- .java 86
- .xml 23
- .png 42
uj5u.com熱心網友回復:
或者你可以用 Perl 寫一個腳本來完成這一切。
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/say/;
use File::Find;
# Takes directory/directories to scan as a command line argument
# or current directory if none given
@ARGV = qw/./ unless @ARGV;
my %extensions;
find(sub {
if ($File::Find::name =~ /\.([^.] )$/) {
$extensions{$1} = 1;
}
}, @ARGV);
for my $ext (sort { $a cmp $b } keys %extensions) {
say "$ext\t$extensions{$ext}";
}
或使用 bash:
#!/usr/bin/env bash
shopt -s dotglob globstar
declare -A extensions
# Scans the current directory
allfiles=( **/*.* )
for ext in "${allfiles[@]##*.}"; do
extensions["$ext"]=$(( ${extensions["$ext"]:-0} 1))
done
for ext in "${!extensions[@]}"; do
printf "%s\t%d\n" "$ext" "${extensions[$ext]}"
done | sort -k1,1
或任何外殼程式(不適用于帶有換行符的檔案名;但是,如果使用 GNU 用戶空間工具,則有一些方法可以解決):
find . -name "*.*" | sed 's/.*\.\([^.]\{1,\}\)$/\1/' | sort | uniq -c
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463873.html
上一篇:V-for在2個單獨的物件陣列上
