【问题标题】:Rename filename inside the crontab file重命名 crontab 文件中的文件名
【发布时间】:2018-03-03 17:25:53
【问题描述】:

下面的文件是我的 crontab,

00 * * * * /home/@@@@/ulimit_nofile_status_20480.sh >> /export/####/$$$$$/ulimit_nofile_status.txt

00 * * * * /home/@@@@/ulimit_nproc_status_20480.sh >> /export/####/%%%%/ulimit_nproc_status.txt

我想将文件名 (ulimit_nofile_status_20480.sh 和 ulimit_nproc_status_20480.sh) 更改为 (ulimit_nofile_status_40960.sh 和 ulimit_nproc_status_40960.sh) 这些是文件名。

我想将 20480 重命名为 40960

尝试了以下命令,但对我不起作用。

crontab -l | sed 's#/_20480\.#/40960.#' | crontab -

crontab -l | sed 's/\<_20480\>/40960/' | crontab -

【问题讨论】:

  • 它们不起作用文件名不包含/&lt;&gt; - 你希望这些做什么?
  • 虽然您可以通过脚本来完成,但我仍然强烈建议您使用crontab -e 并使用编辑器中的搜索替换功能。

标签: linux bash shell cron


【解决方案1】:

我个人会使用crontab -e 进行编辑,但如果您想使用 sed 进行编辑,这行似乎可以做到:

crontab -l | sed 's/20480/40960/' | crontab -

【讨论】:

    【解决方案2】:

    试试这个:

    crontab -l | sed 's/_20480\./_40960./'
    

    如果可行,那么(并且然后)使用它来实际进行更改:

    crontab -l | sed 's/_20480\./_40960./' | crontab -
    

    您第一次尝试失败的原因是您将“/_20480\.”作为模式,而斜线使其无法匹配。看起来您混合使用“/”和“#”作为模式分隔符;您可以使用其中一个,但不能同时使用两个。 (我在上面使用了“/”。)

    您第二次尝试失败的原因是您尝试在模式中使用\&lt;\&gt;。正则表达式语法的一些变体使用这些作为单词边界分隔符,但sed 使用的变体 (POSIX "basic" regex syntax) 没有——它们只是被视为文字字符“”,并且因为那些没有出现在文件名中,所以不匹配。

    【讨论】:

      猜你喜欢
      • 2014-01-29
      • 2014-06-01
      • 2014-09-09
      • 2014-06-07
      • 2021-08-20
      • 2019-02-27
      • 2017-12-23
      • 2022-11-25
      • 1970-01-01
      相关资源
      最近更新 更多