[英]Need help editing a script
我想创建一个以目录名称作为输入的脚本,然后解析该目录中的所有子目录,并显示每个子目录中文件名中输入日期(以YYYYMMDD格式)的文件数。 。
现在我有这个:
#!/bin/bash
clear
echo "Please enter date in YYYYMMDD format ";
read date;
dirList=`ls -d *`
for d in $dirList ; do
count=`find $d -name "*$date*" | wc -l`
echo $d : $count
done
这只是解析当前目录中的所有子目录,并正确显示解决方案。 我应该如何编辑它以输入目录路径并在该目录中执行相同操作?
您想知道如何(1)从stdin读取目录名(大概是从那里获取输入的信息),以及(2)在脚本执行期间使用该目录吗?
没有比这更简单的了:
read -p "Please enter directory to start from: " dir
cd "$dir" || exit
也就是说,脚本的其余部分也可以进行一些错误修复:
for d in */; do
count=$(find "$d" -name "*${date}*" -printf '\n' | wc -l)
echo "$d: $count"
done
使用ls -d *
在以下几个方面存在问题:
ls
的结果字符串分割,将名为dir with four words
作为四个单独的目录dir
, with
, four
和words
ls
实现的行为有所不同)。 同样,由于缺少引号, echo $d : $count
是错误的:
dir with * wildcard
名为dir with * wildcard
将*
扩展为当前目录中所有文件和目录的列表。 同样, find "$d" -name "*${date}*" | wc -l
find "$d" -name "*${date}*" | wc -l
也不能保证是准确的计数:如果文件名的名称中包含换行符,则find
某些实现会将其输出中的内容作为文字包含在内,从而导致wc
对该文件进行多次计数(对于每个换行符); 因此, -printf '\\n'
对于每个已识别的文件仅打印单个换行符,而不打印名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.