我有数百个目录,其中一些嵌套在其他目录中,文件数以万计。这些文件需要从其中删除日期/时间戳。
一个示例文件名是Letter to Client 27May2016~20160531-162719.pdf
,我希望它恢复原状Letter to Client 27May2016.pdf
另一个示例文件名是ABCDEF~20160531-162719
,我希望它恢复为ABCDEF
. 请注意,与上面的示例不同,此文件没有扩展名。
我需要一个可以在受影响文件夹的根目录运行的命令,该命令将递归地通过并查找/修复文件名。
(我使用 Syncthing 同步文件,并通过将已删除的文件从.stversions
目录复制回它们所在的位置来恢复它们,但发现 Syncthing 附加了该日期/时间戳......)
认识 Perl
rename
工具:(在线手册页,另见此 Q)
该正则表达式表示要匹配波浪号,因为许多字符不是点,但至少是一个;并用空字符串替换任何匹配的内容。删除
-n
以实际进行替换。我们可以将模式更改~[-0-9]+
为仅替换数字和破折号。抱歉,您说的是“递归”,所以让我们使用
find
:或者只是使用 Bash 或 ksh,尽管
~
后跟数字的目录会破坏这一点:再次,删除
echo
实际进行重命名。在 bash 中:
这会找到所有与日期模式匹配的文件名(递归)(在波浪号之后),然后回显一个示例
mv
命令来重命名它们。mv 命令的目标是 bash 参数扩展的结果,它将任何波浪号日期字符串文本替换为空。代码:
以上命令实现了上述结果