我想列出所有目录并将其数量放在它旁边。查找pwd中所有目录的目录中的文件数
我能找到的文件总数ls -lR | grep .*.mp3 | wc -l
。但我怎么能得到一个输出这样的:
dir1 34
dir2 15
dir3 2
...
我不介意写入文本文件或CSV来获取这些信息如果无法得到它在屏幕上。
谢谢大家对此的任何帮助。
我想列出所有目录并将其数量放在它旁边。查找pwd中所有目录的目录中的文件数
我能找到的文件总数ls -lR | grep .*.mp3 | wc -l
。但我怎么能得到一个输出这样的:
dir1 34
dir2 15
dir3 2
...
我不介意写入文本文件或CSV来获取这些信息如果无法得到它在屏幕上。
谢谢大家对此的任何帮助。
可能有更好的方法,但这似乎工作。
在shell脚本将这个:
#!/bin/sh
for f in *
do
if [ -d "$f" ]
then
cd "$f"
c=`ls -l *.mp3 2>/dev/null | wc -l`
if test $c -gt 0
then
echo "$f $c"
fi
cd ..
fi
done
find . -type f -iname '*.mp3' -printf "%h\n" | uniq -c
或者,如果顺序(DIR-> count,而不是count-> DIR)是真正重要的是你:
find . -type f -iname '*.mp3' -printf "%h\n" | uniq -c | awk '{print $2" "$1}'
+1很好。 – Abs 2010-06-19 13:30:37
如果没有“排序”,它可以多次列出一些目录。你的awk命令可以简化为'awk'{print $ 2,$ 1}''或者你可以像这样使用OP的逗号分隔的样式:'awk'{print $ 2','$ 1}' – 2010-06-19 13:41:00
我最终使用了: 'find/-type f -printf“%h \ n”|排序| uniq -c | sort -r -n |头' 额外的排序,以确保'uniq'统计每个人一次。 第二'排序'是按数字排序,反向 - 'head'给你TOP10 – 2011-09-08 08:51:19
这似乎工作假设你在一个目录中的一些子目录可能包含MP3文件。它省略了顶层目录。它将按照包含的最大数量的mp3文件的顺序列出目录。
find . -mindepth 2 -name \*.mp3 -print0| xargs -0 -n 1 dirname | sort | uniq -c | sort -r | awk '{print $2 "," $1}'
我用print0更新了这个,用空格和其他棘手字符处理文件名,并打印适合CSV的输出。
+1很好用。 – Abs 2010-06-19 13:30:57
除非我做'xargs -I {} -n 1 dirname \ {\}',否则我会得到一个额外的'.'。 – 2010-06-19 13:39:10
你有什么操作系统和版本的find? -mindepth 2应该消除'.'。我正在运行Ubuntu 10.04 GNU find 4.4.2。这个命令不包含'.'。我测试了带有和没有mp3文件的''。 – 2010-06-19 22:34:48
用Perl:
perl -MFile::Find -le'
find {
wanted => sub {
return unless /\.mp3$/i;
++$_{$File::Find::dir};
}
}, ".";
print "$_,$_{$_}" for
sort {
$_{$b} <=> $_{$a}
} keys %_;
'
这里是另一种方式来处理,甚至含有异常的(但合法)的字符,如换行的文件名,...:
# count .mp3 files (using GNU find)
find . -xdev -type f -iname "*.mp3" -print0 | tr -dc '\0' | wc -c
# list directories with number of .mp3 files
find "$(pwd -P)" -xdev -depth -type d -exec bash -c '
for ((i=1; i<=$#; i++)); do
d="${@:i:1}"
mp3s="$(find "${d}" -xdev -type f -iname "*.mp3" -print0 | tr -dc "${0}" | wc -c)"
[[ $mp3s -gt 0 ]] && printf "%s\n" "${d}, ${mp3s// /}"
done
' "'\\0'" '{}' +
真棒!这对我来说是最好的答案,因为它允许我轻松地在目录和数字之间添加逗号,所以我可以将它用作CSV文件以便在Excel中查看,并且还可以在屏幕上查看它。谢谢你。 :) – Abs 2010-06-19 13:30:06