与目录同名的输出脚本

与目录同名的输出脚本

我正在尝试编写一个脚本,其中的输出应该以其父目录命名。

例如:我有 3 个目录名为2018-10-01, 2018-11-11, 2018-06-05. 每个目录中有 n 个文件。

我运行以下命令:

for D in */; do wc -l * > response.txt; done

我在每个文件夹中都获得了输出,但名称相同,即 response.txt。

我在这里想要的是response.txt应该以其父目录的名称命名。

答案1

我假设您想要一种“摘要文件”,其中包含每个相应目录中所有文件的行数。

像您一样使用 shell glob,可以像这样实现:

for directory in */ ; do
    wc -l "$directory"/* > "$directory/$(basename "$directory").txt"
done

首先,我将您的 glob 更改为wc匹配相应目录中的文件,而不是当前文件夹,因为我假设这是您想要实现的。然后我通过替换命令的输出来编写目标文件名basename,该命令返回它作为参数获取的路径的最后一个组件(例如“2018-11-16/foo/”中的“foo”)

但请注意,根据您的 shell 选项,并非所有文件都可能匹配。默认情况下,隐藏文件(以 开头的文件名.)将被忽略,除非您已使用dotglob来设置选项集shopt -s dotglob

答案2

我不确定你到底想用“wc -l”做什么,因为这会将完全相同的答案放入每个 response.txt 文件中。你是否希望获取每个目录中的条目数,并将其放入与该目录关联的 response.txt 文件中?如果是这样,请尝试这个

for D in */; do
  wc -l ${D}/* >${D}-response.txt
done

这将循环遍历每个目录,获取每个目录中的项目总数,并将输出存储在以目录名开头并以“-response.txt”结尾的文件中

希望这可以帮助。

相关内容