Text-Processing
製作目錄中文件數量的 nicely 格式列表 - 可能是 awk 和 sed
我在一系列目錄中有很多很多文件,並且想要一個格式很好的列表,列出每個目錄中有多少文件。
目錄的順序如下:父目錄名為 A、B、… H、I。在每個目錄下,有 1 到 7 個目錄,分別命名為 001、002、… 007。在這些目錄中,文件 I’想要一個文件計數。
我所希望的,是這樣的:
... C/003 122 C/004 45 C/005 462 D/001 215 電子/001 98 電子/002 323 ...
我正在考慮目錄名稱和計數之間的選項卡。計數是左對齊還是右對齊都沒有關係。
我自己做的基本上是這樣的:
(對於我在 */* 做 迴聲 >>> $i" ls "$i" | 廁所 完成) > file_count
結果是這樣的:
... >>> F/002 30 30 234 >>> F/003 120 120 1322 >>> G/001 78 78 620 ...
顯然,還不錯……如果我用“>>>”替換
wc
並wc -l
刪除它會更好 -除了每個“記錄”將超過兩行而不是一行。所以我需要的是一些
awk
或sed
(或其他任何東西- 有沒有比這兩條線更簡單的工具來連接兩條線?)魔術將兩條線和兩條線連接成一條線。但是,如果有一種更直接的方法(shell-script、perl、python、一些非常黑暗的sed 和 awk 魔法)可以“一次性”列出一個列表,那就更好了……
假設您的文件名不包含換行符並且您
grep
支持 -o 選項:find [[:upper:]] -type f | grep -Eo '^./[0-9]{3}' | sort | uniq -c
您可以為每個目錄分別建構一個文件數組,然後只計算元素的數量。那
bash
會是這樣的for dir in */*/; do a=( "$dir"/* ); printf "%s\t%s\n" "$dir:" "${#a[@]}"; done
如果
A/001
etc. 也包含您想要包含的內容的目錄,則添加**
glob:shopt -s globstar for dir in */*/; do a=( "$dir"/**/* ); printf "%s\t%s\n" "$dir:" "${#a[@]}"; done