我想创建一个脚本,将目录名作为输入,然后解析该目录中的所有子目录,并显示每个子目录中输入日期的文件计数(以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
这只是浏览当前目录中的所有子目录并正确显示解决方案。如何编辑它以获取目录路径的输入并在该目录中执行相同操作?
答案 0 :(得分:2)
你想知道如何(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
和{ {1}} words
实施'行为不同)正常工作。同样地,由于缺少引号,ls
是错误的:
echo $d : $count
的目录会将dir with * wildcard
扩展为当前目录中所有文件和目录的列表。同样地,*
也不保证是准确的计数:如果文件名在其名称中包含换行符,则find "$d" -name "*${date}*" | wc -l
的某些实现将在其输出中包含那些作为文字的那些,导致find
多次计算该文件(对于每个换行符);因此wc
只为每个标识的文件打印一个换行符,而不是一个名称。