根据内容重命名文件

ta

在macOS Sierra(v。10.12.6)中,我有一个包含许多纯文本(.txt)文件的目录。每个文件都有一个无用的名称,例如“ untitled text 252.txt”。我想知道是否可以根据每个文件第一行中的代码以编程方式重命名每个文件。

每个文件都以节符号(§),空格,始终包含句点(.的代码和空格开头该代码通常只是数字,但偶尔还会在-其后跟一个连字符()。例如:'§ 177.30 ''§ 60.10-a '

我想根据文件的代码来重命名每个文件,但首先要重新格式化代码。简而言之,为aP加上前缀,从代码中去除句点,然后添加尾随.txt使用上面的示例,文件名将为:P17730.txtP6010-a.txt

在命令提示符下,我想出了如何从每个文件grep代码:

grep -o '^§ [A-Za-z0-9]*\.[A-Za-z0-9\-]* ' *.txt

这将返回从节符号到尾随空格的所有内容(例如'§ 130.65-a ')。

因此,剩下的问题是:

  1. 如何将grep结果重新格式化为所需的文件名(例如P13065-a.txt);和,
  2. 如何将文件重命名操作与grep结合使用?
随机

您可以使用sed从第一行中仅提取数字(通过删除所有非数字):

$ sed -n '1 {s/[^0-9]//g; p;}' <<<"§ 177.30 "
17730

然后是find所有*.txt文件,提取数字,然后重命名为P<digits>.txt与就地重命名相比,将文件动态重命名复制到目标目录更加安全:

$ mkdir -p /path/to/targetdir
$ find . -name '*.txt' -exec bash -c 'digits=$(sed -n "1{s/[^0-9]//g;p;}" "$1"); cp "$1" "/path/to/targetdir/$newname"' _ {} \;

通过执行一个简短的bash脚本:

#!/bin/bash
digits=$(sed -n "1{s/[^0-9]//g;p;}" "$1")
cp "$1" "/path/to/targetdir/$newname"

对于找到的每个文件find(并作为第一个位置参数$1)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章