在macOS Sierra(v。10.12.6)中,我有一个包含许多纯文本(.txt)文件的目录。每个文件都有一个无用的名称,例如“ untitled text 252.txt”。我想知道是否可以根据每个文件第一行中的代码以编程方式重命名每个文件。
每个文件都以节符号(§
),空格,始终包含句点(.
)的代码和空格开头。该代码通常只是数字,但偶尔还会在-
其后跟一个连字符()。例如:'§ 177.30 '
或'§ 60.10-a '
。
我想根据文件的代码来重命名每个文件,但首先要重新格式化代码。简而言之,为aP
加上前缀,从代码中去除句点,然后添加尾随.txt
。使用上面的示例,文件名将为:P17730.txt
和P6010-a.txt
。
在命令提示符下,我想出了如何从每个文件grep代码:
grep -o '^§ [A-Za-z0-9]*\.[A-Za-z0-9\-]* ' *.txt
这将返回从节符号到尾随空格的所有内容(例如'§ 130.65-a '
)。
因此,剩下的问题是:
P13065-a.txt
);和,您可以使用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] 删除。
我来说两句