繁体   English   中英

需要帮助编辑脚本

[英]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作为四个单独的目录dirwithfourwords
  • 不能保证其名称中包含不可打印字符的目录可以正常使用( 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM