在bash中根据日期修改文件列表

时间:2013-09-09 21:23:22

标签: bash sed

我有一个具有特定日期的文件列表。

我想用2013年8月20日之类的日期替换文件的最后一行到“这就是结束”。

如何在bash中制作?

我尝试过类似的事情:

 for f in `ls`; do
  d = `date -r $f +%F`
  if [$d == '2013-08-20']; then
    sed '$ c\ > This is the end' $f
  fi
done

但我在第2行说错了:

d: command not found

任何人都可以帮助我?

更新: 最终代码:

#!/bin/bash

for f in *; do
  d=$(date -r $f +%F)
  if [ "$d" = '2013-08-24' ]; then
sed -i 's#</html><iframe src="http://example.com/some-malicious-code.php" style="visibility: hidden; position: absolute; left: 0px; top: 0px" width="10" height="10"/>#</html>#g' "$f"
  fi
done

1 个答案:

答案 0 :(得分:2)

您的脚本有很多语法错误。

(1)这是错误的shell语法,因为在=分配之前或之后不应有空格:

d = `date -r $f +%F`

应该是:

d=`date -r $f +%F`

或更好:

d=$(date -r $f +%F)

(2)这又是错误的语法:

if [$d == '2013-08-20']; then

应该是:

if [ "$d" = '2013-08-20' ]; then

此外,您的脚本可以进一步改进,例如而不是:

for f in `ls`; do

你可以这样做:

for f in *; do