bash脚本,以帮助识别文件和路径,计数按星期几排序
我还不是一个真正的编剧,所以提前道歉 我需要做的是搜索过去7天内的文件路径,然后计算每个目录中每天(周一到周日)每个目录中的文件数 所以对于每个人来说 从文件夹-根文件 目录1: 星期一的文件数 文件数..n 星期天的文件数 目录2: 星期一的文件数 文件数..n 星期天的文件数 到目前为止,我已经从我的基本命令行知识和一些研究中了解到了这一点bash脚本,以帮助识别文件和路径,计数按星期几排序,bash,unix,Bash,Unix,我还不是一个真正的编剧,所以提前道歉 我需要做的是搜索过去7天内的文件路径,然后计算每个目录中每天(周一到周日)每个目录中的文件数 所以对于每个人来说 从文件夹-根文件 目录1: 星期一的文件数 文件数..n 星期天的文件数 目录2: 星期一的文件数 文件数..n 星期天的文件数 到目前为止,我已经从我的基本命令行知识和一些研究中了解到了这一点 #!/bin/bash find . -type f -mtime -7 -exec ls -l {} \; | grep "^-" | awk '{
#!/bin/bash
find . -type f -mtime -7 -exec ls -l {} \; | grep "^-" | awk '{
key=$6$7
freq[key]++
}
END {
for (date in freq)
printf "%s\t%d\n", date, freq[date]
}'
但是有几个问题,我需要打印每个目录,然后我需要计算星期一、星期二、星期三的排序
出于某种原因,它可以在我的测试文件夹中使用基本文件夹和名称,但不能在生产文件夹中使用
即使是一些关于从哪里开始思考的建议也会有所帮助
提前谢谢大家,你们都很棒
尼尔我发现了一些有帮助的附加代码
#!bin/bash
# pass in the directory to search on the command line, use $PWD if not arg received
rdir=${1:-$(pwd)}
# if $rdir is a file, get it's directory
if [ -f $rdir ]; then
rdir=$(dirname $rdir)
fi
# first, find our tree of directories
for dir in $( find $rdir -type d -print ); do
# get a count of directories within $dir.
sdirs=$( find $dir -maxdepth 1 -type d | wc -l );
# only proceed if sdirs is less than 2 ( 1 = self ).
if (( $sdirs < 2 )); then
# get a count of all the files in $dir, but not in subdirs of $dir)
files=$( find $dir -maxdepth 1 -type f | wc -l );
echo "$dir : $files";
fi
done
使用我的原始代码块,这会有所帮助
道具
对于这段代码,这是一个很好的问题
我认为在find
命令中,您需要添加--time style=+%w
以获取一周中的某一天
find . -type f -mtime -7 -exec ls -l --time-style=+%w {} \;
我不知道为什么要对以破折号开头的行进行灰显(因为您已经只找到了文件)。这不是必需的,所以我将删除它
然后,我将通过剥离文件名或每行最后一个斜杠后的所有内容,从该输出中获取目录名
| sed -e 's:/[^/]*$:/:'
然后我会在一周的前一天把所有的代币都剪下来。由于您使用
作为起点,因此可以预期每个目录都以/
开头
| sed -e 's:.*\([0-6]\) \./:\1 ./:'
从这里可以sort-k2
按目录名排序,然后按星期几排序
find . -type f -mtime -7 -exec ls -l --time-style=+%w {} \;
最终,您可以通过管道将其传输到uniq-c
中,以按目录获取每周的天数,但我会首先将其转换为人类可读的天数
| awk '
/^0/ { $1 = "Monday " }
/^1/ { $1 = "Tuesday " }
/^2/ { $1 = "Wednesday" }
/^3/ { $1 = "Thursday " }
/^4/ { $1 = "Friday " }
/^5/ { $1 = "Saturday " }
/^6/ { $1 = "Sunday " }
{ print $0 }
'
综上所述:
find . -type f -mtime -7 -exec ls -l --time-style=+%w {} \; \
| sed -e 's:/[^/]*$:/:' \
| sed -e 's:.*\([0-6]\) \./:\1 ./:' \
| sort -k2 \
| awk '
/^0/ { $1 = "Monday " }
/^1/ { $1 = "Tuesday " }
/^2/ { $1 = "Wednesday" }
/^3/ { $1 = "Thursday " }
/^4/ { $1 = "Friday " }
/^5/ { $1 = "Saturday " }
/^6/ { $1 = "Sunday " }
{ print $0 }
' | uniq -c
在我的完全随机PWD上
看起来是这样的:
1 Monday ./
1 Tuesday ./
5 Saturday ./
2 Sunday ./
17 Monday ./M3Javadoc/
1 Thursday ./M3Javadoc/
1 Saturday ./M3Javadoc/
1 Sunday ./M3Javadoc/
你必须使用shell吗?对于任何非琐碎的事情,我都会选择perl或python之类的语言。我会选择@NoufalIbrahim作为第二语言。虽然我觉得用Ruby更容易;)是的,现在我需要使用bash:(事实上,我被告知perl很好,所以我可能会继续使用perl,因为我在perl中更容易使用,谢谢大家!