更改文件名后缀(使用 sed ?)

2024-04-18

我想改变文件名后缀来自文件(使用 bash 脚本),但有时有些文件带有一个句点,有些文件带有两个句点。

现在我用这个:

new_file=`echo ${file} | sed 's/\(.*\.log.*\)'${suf}'/\1.'${num}'/'`

其中“new_file”是新文件名,“file”是原始文件名,“${suf}”是文件后缀,${num} 是新数字。

So some.log必须成为一些.log.1 and 一些.log.1必须成为一些.log.2。用我的代码some.log变成一些.log.1, but 一些.log.1遗迹一些.log.1.

我希望我说得足够清楚。我很感激任何建议(即使不使用 sed)。

Update:

@paxdiablo https://stackoverflow.com/questions/3690936/change-file-name-suffixes-using-sed/3690996#3690996。我认为测试出了问题。

现在我用这段代码作为测试;

#!/usr/bin/bash

        shft() {
            for suff in {6..1} ; do
                if [[ -f "$1.${suff}" ]] ; then
                    ((nxt = suff + 1))
                    echo Moving "$1.${suff}" to "$1.${nxt}"
                    mv -f "$1.${suff}" "$1.${nxt}"
                fi
            done
            echo Moving "$1" to "$1.1"
            mv -f "$1" "$1.1"
        }

        clear

        folder=~/logs/*.log

        for i in {1..20}; do
            echo ${i}> ~/logs/some.log 

            for fspec in ${folder} ; do
                    shft "${fspec}"
            done
        done

现在一切正常。对困惑感到抱歉。


如果您想要滚动日志文件,并且根据您需要的复杂程度,我之前使用过以下片段:

#!/usr/bin/bash
# rollover.sh
#   Rolls over log files in the current directory.
#     *.log.8 -> *.log.9
#     *.log.7 -> *.log.8
#     : : :
#     *.log.1 -> *.log.2
#     *.log   -> *.log.1

shft() {
    # Change this '8' to one less than your desired maximum rollover file.
    # Must be in reverse order for renames to work (n..1, not 1..n).
    for suff in {8..1} ; do
        if [[ -f "$1.${suff}" ]] ; then
            ((nxt = suff + 1))
            echo Moving "$1.${suff}" to "$1.${nxt}"
            mv -f "$1.${suff}" "$1.${nxt}"
        fi
    done
    echo Moving "$1" to "$1.1"
    mv -f "$1" "$1.1"
}

for fspec in *.log ; do
    shft "${fspec}"
    #date >"${fspec}" #DEBUG code
done

这将自动将日志文件滚动到版本 9,尽管您只需更改suff for循环以允许更多。

接着就,随即DEBUG添加后,会自动创建新文件进行测试,以下记录显示了它的实际效果:

pax> touch qq.log ; ./rollover.sh
Moving "qq.log" to "qq.log.1"

pax> touch "has spaces.log" ; ./rollover.sh
Moving "has spaces.log" to "has spaces.log.1"
Moving "qq.log.1" to "qq.log.2"
Moving "qq.log" to "qq.log.1"

pax> ll *log*
-rw-r--r-- 1 pax None 30 2010-09-11 20:39 has spaces.log
-rw-r--r-- 1 pax None  0 2010-09-11 20:39 has spaces.log.1
-rw-r--r-- 1 pax None 30 2010-09-11 20:39 qq.log
-rw-r--r-- 1 pax None 30 2010-09-11 20:38 qq.log.1
-rw-r--r-- 1 pax None  0 2010-09-11 20:38 qq.log.2

该脚本的好处是它可以轻松配置以处理大量历史记录(通过更改{8..1}位),处理带空格的名称,并在日志文件丢失时相对稳健地处理间隙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改文件名后缀(使用 sed ?) 的相关文章

  • 如何让“wc -l”只打印没有文件名的行数?

    wc l file txt 输出行数和文件名 我只需要数字本身 而不是文件名 我可以做这个 wc l file txt awk print 1 但也许有更好的方法 试试这个方法 wc l lt file txt
  • 对 shell 变量中的单引号进行转义

    我编写了一个 Bash 脚本来将值插入到SQLite https en wikipedia org wiki SQLite数据库 命令如下 sqlite3 db name insert into table name column1 col
  • Shell 脚本对文件进行计数,然后删除最旧的文件

    我是 shell 脚本新手 所以我需要一些帮助 我有一个充满备份的目录 如果我有超过 10 个备份文件 我想删除最旧的文件 以便仅留下 10 个最新的备份文件 到目前为止 我知道如何计算文件数 这看起来很简单 但是如果计数超过 10 我该如
  • 尝试更改冻结标题:有 FB 开发人员吗?

    在过去的几年里 这个问题已经被问过几次了 但正如 Facebook 告诉我的那样 Facebook 工程师积极参与 StackOverflow 所以我希望在这里能得到一些快乐 我们已将视频上传到 YouTube 进行了转发并确保我们对此感到
  • 自动将 Linux 文件名重命名为 Windows 中合法的新文件名

    我想将 linux 文件重命名为在 windows 中合法的文件名 它的长度不应超过允许的长度 并且不应包含 Windows 中不允许的字符 有时我将论文的标题复制到文件名 它们有特殊字符 例如 or 另外 从 pdf 中复制和粘贴标题时
  • 从 PHP 启动交互式 SSH bash 会话

    我正在使用 PHP 编写常见服务器管理任务的快捷方式 我正在使用deployer org 但这应该不重要 我想添加一个任务 用于在通过 SSH 连接到服务器后启动交互式 bash 提示符 例如 您将运行 dep ssh 其中 dep 是一个
  • 删除一行中逗号之前的所有内容

    我有多个文件 其中包含以下行 foo 123456 bar 654321 baz 098765 我想删除每行逗号之前 包括 的所有内容 输出将是 123456 654321 098765 在另一个问题上看到类似的内容后 我尝试使用以下内容
  • 在 Bourne Shell 中从变量中删除换行符

    在 bourne shell 中我有以下内容 VALUES some command that returns multiple line values echo VALUES 好像 ONE TWO THREE FOUR 我希望它看起来像
  • 从查找文件中批量重命名部分文件名

    edit 请参阅底部以了解我的最终解决方案 我有一个包含约 12 700 个文本文件的目录 他们的名字是这样的 1 Re Report Novenator 公开呼吁埋葬 Lizbett 星期四 2009 年 9 月 10 日 txt 其中前
  • 如何在接收端打开没有 SSHD 的 shell?

    我有一台没有 SSHD 的机器 我想从远程机器 我可以完全控制 在这台机器上打开 bash shell 由于我的有限机器上有 SSH 因此我配置了反向代理 ssh R 19999 localhost 22 remoteuser remote
  • 熊猫系列名称

    我试图将我的系列命名为 Points 但它没有显示为 Points Points pd Series 1 2 3 print Points name output None 我什至尝试重命名它 但它仍然显示 无 Points rename
  • 从 AppleScript 路径中提取文件扩展名

    我正在编写一个 Apple 脚本 最终将为 EyeTV 的所有 iTunes 导出标记广告 但我遇到了 AppleScript 路径的一个简单问题 EyeTV 应用程序将其返回为录制位置 这是上下文 set recordingID to 3
  • 使用 nzsql 将数据导出到 CSV

    我想从 netezza 将数据导出为 CSV 数据由数百万行记录组成 数据应位于引号内 并应使用 作为分隔符 例如 a b c 每当您想要从 Netezza 导出数据时 您都会需要使用其外部表功能 如果要导出到 Netezza 主机本地安装
  • 使用 sed 反转输入顺序

    我有一个文件 我们将其命名为 a txt 该文件包含以下文本行 do to what 我想知道 SED 命令是什么来反转此文本的顺序 使其看起来像 what to do 我必须做某种追加吗 就像将 do 附加到 to 所以它看起来像 to
  • “排序文件名 | uniq”不适用于大文件

    我可以从小文本文件中删除重复条目 但不能从大文本文件中删除重复条目 我有一个 4MB 的文件 文件的开头如下所示 aa aah aahed aahed aahing aahing aahs aahs aal aalii aalii aali
  • 将 stdout 和 stderr 捕获到不同的变量中

    是否可以存储或捕获 stdout 和 stderr不同的变量 不使用临时文件 现在我这样做是为了获得标准输出out和标准错误err跑步时some command 但我会 喜欢避免临时文件 error file mktemp out some
  • Bash 变量:区分大小写?

    Bash shell 脚本区分大小写吗 是可变的date与DATE 是的 它区分大小写 就像 UNIX 的其余部分一样 date and DATE是两个不同的变量 makefile and Makefile是两个不同的文件 h and H是
  • 为什么我不能在 while 循环内评估?

    我想在循环中创建 bash 别名 其中循环从命令读取行 为了逐行读取输出 我相信我需要将输出通过管道传输到read 然而 当我这样做时 别名不存在 如果我将以下内容包含在我的 bashrc for x in a1 a2 do eval al
  • 当模式在范围内时使用 sed 打印范围?

    我有一个充满查询的日志文件 我只想查看有错误的查询 日志条目类似于 path to file executing query QUERY SIZE ROWS MSG DURATION 我想打印所有这些东西 但只有当MSG 包含一些有趣的内容
  • 在 UNIX 时间戳 Shell/Bash 中将日期与时区转换

    我需要将日期从格式为 yyyy mm dd hh mm ss TZ 的字符串转换为 UNIX 时间 TZ 时区 到目前为止我所做的是将没有时区的 yyyy mm dd hh mm ss 格式的日期转换为时间戳 dateYMD 2019 2

随机推荐

  • 分析 mex 函数

    我刚刚用 c 将 Matlab 程序重写为 mex 函数以加快速度 并取得了出色的结果 这个优化决策是一个非常非常好的主意 无需线程即可将速度提高 20 倍 它仍然让我很好奇 mex 函数将时间花在什么上 并希望找出可能的瓶颈 我正在寻找一
  • 创建自定义表格表示的函数

    我使用下面的代码来概述我的部分数据 从以下代码中创建函数的最佳方法是什么 它将采用 dataList 以及一些图形选项 例如颜色 作为参数 并返回自定义的表格表示形式 如下所示 overviewtheData Text Grid Map R
  • Symfony 2 FOS 用户捆绑包 Bootstrap 模式 AJAX 登录

    有没有人已经使用 Symfony 2 和 FOS User Bundle 在 Bootstrap 模式中构建了登录表单 这是我现在所拥有的 src Webibli UserBundle Resources config service ym
  • 使用 PHP 生成 Windows .lnk 文件

    我正在开发一个项目 其中涉及运行 ProFTPd 的 FTP 服务器和为用户创建帐户的 PHP MySQL 后端 创建帐户后 系统会向用户发送电子邮件 其中包含其帐户详细信息以及下载 FileZilla 或 Cyber Duck 的说明 具
  • Publish 不是改造 web.config 吗?

    我制造了一个web config 完整文件 http pastebin com rYreaVyP 它不显示 XML 错误
  • 如何从 HttpInputStream 获取 docx 文件的字节数组?

    我正在使用这篇文章第一个答案中的方法 如何从 HttpPostedFile 创建字节数组 https stackoverflow com questions 359894 how to create byte array from http
  • 如何写入 stdIn (JAVA) [重复]

    这个问题在这里已经有答案了 我想通过使用一些输入 例如 join 8 对我的 P2P 系统进行一些测试 8 是节点号 对于我的系统 命令 join 8 是从标准输入读取的 但我不想将其键入数百次以进行数百次测试 因此我编写了一个测试函数来随
  • HTML5 视频 - 在特定时间开始视频并播放 x 时间

    我正在尝试创建在特定时间点启动本地视频并播放特定持续时间的按钮 我已经让它在某个时刻播放 但不知道如何让它只播放一定的持续时间 这是代码 HTML
  • C++ 中的叉积

    给定以下Python 来自http norvig com sudoku html http norvig com sudoku html def cross A B Cross product of elements in A and el
  • 使用 Terraform(工作区、模块?)配置客户帐户最佳实践?

    我需要在 AWS 中创建和管理多个客户环境 并且希望利用 Terraform 来部署所有必要的资源 每个客户环境基本相同 只是用于访问其中一台服务器的 URL 不同 我已经整理了一个 Terraform 配置 可以为给定客户部署所有资源 但
  • 来自本地运行的 docker 容器内的 Azure 托管身份

    我正在运行一个由 asp net core 2 2 api 组成的 docker 容器 此 api 需要访问 Azure 密钥保管库 并且我已使用在密钥保管库上具有正确访问策略的用户登录 Visual Studio 以检索机密 但是 当我使
  • 为什么 JDBC 是动态加载而不是导入? [复制]

    这个问题在这里已经有答案了 在 JDBC 中 我只看到使用的示例 Class forName com mysql jdbc Driver true cl 还没有看到有人使用 import com mysql jdbc Driver 是不是因
  • 从 MySQL 数据库中选择随机问题; “正确答案”搞砸了

    我正在使用 PHP 和 MYSQL 构建一个简单的测验程序 测验旨在一次显示一个问题 问题为多项选择题 每个问题有 4 个可能的答案 如果玩家选择正确 他将进入下一个问题 如果他选错了 测验就会结束 首先 我设计的测验如下 1 创建一个数据
  • 如何使用 Spring 表达式语言将不带构造函数的对象添加到列表中

    我想添加一个BigDecimal使用 Spring 表达式语言的列表 public class SpelTest public List
  • 检查 iterable 的所有值是否为零

    有没有一种好的 简洁 内置的方法来查看可迭代中的所有值是否为零 现在我正在使用all 有一点列表理解 但是 对我来说 似乎应该有一种更具表现力的方法 我认为这在某种程度上相当于memcmp in C values 0 0 0 0 0 Tes
  • 使用 bash、Azure CLI 和 REST API 访问 CosmosDB - 如何正确获取令牌和哈希?

    我的最终目标是使用 bash 和 Azure CLI 将文档上传到现有的 CosmosDB SQL 实例 问题是 Azure CLI 确实如此不提供修改文档的命令 https learn microsoft com en us cli az
  • Spring MVC application.properties 不会被配置文件 application-dev.properties 覆盖

    我正在寻找一种根据 JVM 环境变量配置不同 application properties 文件的方法 我在 Spring 参考资料中找到了这个文档 除了 application properties 文件之外 还可以使用命名约定 appl
  • C# 中的异常有多昂贵?

    C 中的异常有多昂贵 只要堆栈不深 它们似乎并不会非常昂贵 然而我读到了相互矛盾的报道 有没有没有被反驳的明确报告 读到异常在性能方面代价高昂后 我编写了一个简单的测量程序 与该程序非常相似乔恩 斯基特 多年前发表 https web ar
  • 如何从 OsStr 和 str 组件构建 URL?

    此代码遍历文件夹 并查找以以下结尾的文件 txt 接下来 我想采取entry file name 这是属于std ffi os str OsStr输入 并将其加入BASE URL来形成一个 URL const FOLDER NAME str
  • 更改文件名后缀(使用 sed ?)

    我想改变文件名后缀来自文件 使用 bash 脚本 但有时有些文件带有一个句点 有些文件带有两个句点 现在我用这个 new file echo file sed s log suf 1 num 其中 new file 是新文件名 file 是