我正在寻找类似的东西
test1 : 2
aaa.txt
bbb.txt
test2 : 3
ababa.txt
cbbab.txt
ddddd.txt
test3 : 1
mmmm.txt
但是我当前的代码也列出了该目录。如何删除输出中的目录
这是我的代码
find /tmp/test/ -maxdepth 2 -mindepth 1 -type d | while read dir; do printf "%s : " "$dir"; find "$dir" -maxdepth 1 -type f | wc -l; find "$dir" -maxdepth 1 -type f ; done;
我应该改变什么?
答案 0 :(得分:0)
部分解决方案可在此处找到:https://superuser.com/questions/620570/how-do-i-return-only-file-names-from-the-find-command
尝试将find . -type f -exec basename {} \;
命令添加到您的第一个查找查询中。
答案 1 :(得分:0)
这应该有效:
$ find . -type d -print0 | xargs -0 -I {} sh -c ' echo "{}: \c" ; find {} -maxdepth 1 -type f | wc -l ; find {} -maxdepth 1 -type f -print'
<强>更新强>
这个删除了不需要的路径......
$ find . -type d -print0 | xargs -0 -I {} sh -c ' echo "{}: \c" ; find {} -maxdepth 1 -type f | wc -l ; find {} -maxdepth 1 -type f -print | sed "s#.*/##" '
答案 2 :(得分:0)
并非所有输出行都会被变量捕获,因此使用${var##*/}
从var中删除路径将不起作用。所以只需用sed:
find /tmp/test/ -maxdepth 2 -mindepth 1 -type d |
while read dir; do
printf "%s : " "$dir"
find "$dir" -maxdepth 1 -type f | wc -l
find "$dir" -maxdepth 1 -type f
done | sed 's#.*/##'
如果您想要更好的布局,可以使用构造:
find /tmp -maxdepth 2 -mindepth 1 -type d | while read dir; do
# Delete path from dir with ##*/
printf "%s : " "${dir##*/}"
find "$dir" -maxdepth 1 -type f | wc -l
# Replace path with some spaces
find "$dir" -maxdepth 1 -type f | sed 's#.*/# #'
# Redirect the "permission denied messages" to the end of the Galaxy.
done 2>/dev/null