编写一个脚本来查找不正确的文件,并通过 stdout 纠正它们

编写一个脚本来查找不正确的文件,并通过 stdout 纠正它们

我当前正在使用 UNIX bash,并且我想编写 shell 脚本,该脚本允许我使用文件路径名中的信息来更正日期条目。

背景:我以前有 200 个文件没有放在目录中。完成我自己的脚本后,我自动找到每个文件中的第一行(YY/MM/DD)并将每个文件放入其年份目录中,然后是其月份和日期的子目录。例如2002/12/19存放在2002的目录中,然后是12的一个子目录,还有19的另一个子目录。每个文件里面有4条信息。日期始终是第一行。示例 Pic912831(文件名) 2005/02/23 星期三 二月 巴塞罗那 我知道有许多文件尚未存储在目录中,因为文件中的第一行与大多数其他文件不同。我查看了其中一个无法与目录匹配的文件,并注意到日期是“2005-02-23”,而我匹配的文件是“2004/05/14”。在这种情况下我想我将不得不使用

tr '-' '/'

我的要求和必须做的事情:

  1. 识别所有不正确/不匹配的文件
  2. 将正确的第一行回显到临时文件(我认为是年份?)
  3. 追加现有文件的最后 3 行(日、月和位置)。
  4. 移动临时文件以覆盖现有文件

当然,我明白会是这样的。

echo $directory > temp tail -3 $file >> temp mv temp $file

文件名不需要更改,我只需要识别那些不正确的文件并执行上述步骤。我认为为了保持整洁,我希望不匹配的文件采用 YY/MM/DD 格式,而不是 YY-MM-DD。总之:我希望能够编写一个脚本来更正那些不匹配文件的日期条目。

答案1

如果您不需要任何有关日期结构的智能,即它始终采用 YYYY/MM/DD 或 YYYY-MM-DD 的形式,您可以使用一个非常简单的命令来纠正第一行整个目录树中的每个文件。

find . -type f -exec sed -i '1 s:-:/:g' {} \;
  • sed -i就地编辑文件,无需连接和移动文件。
  • '1 ...仅编辑每个文件的第一行。
  • 's:-:/:g'将行中的每个“-”实例替换为“/”

之后,您应该能够重新运行原始脚本并将这些文件分类到正确的日期目录中。

相关内容