【发布时间】:2021-05-31 00:36:37
【问题描述】:
我正在尝试以递归方式重命名一些文件和文件夹以格式化名称,并认为find 和perl-rename 可能是它的工具。我已经找到了大部分我想运行的命令,但最后两个:
- 我希望将目录名称中的每个
.替换为_和 - 对于每个
.,但文件名中的最后一个要替换为_
这样./my.directory/my.file.extension 就变成了./my_directory/my_file.extension。
对于第二个任务,我什至没有命令。
对于第一个任务,我有以下命令:
find . -type d -depth -exec perl-rename -n "s/([^^])\./_/g" {} +
其中重命名./the_expanse/Season 1/The.Expanse.S01E01.1080p.WEB-DL.DD5.1.H264-RARBG./the_expanse/Season 1/Th_Expans_S01E0_1080_WEB-D_DD__H264-RARBG,所以它不起作用,因为.之前的每个单词字符都被吃掉了。
如果改为输入:
find . -type d -depth -exec perl-rename -n "s/\./_/g" {} +,我将./the_expanse/Season 1/The.Expanse.S01E01.1080p.WEB-DL.DD5.1.H264-RARBG 重命名为_/the_expanse/Season 1/The_Expanse_S01E01_1080p_WEB-DL_DD5_1_H264-RARBG,这也不起作用,因为当前目录被_ 替换。
如果有人能给我一个解决方案:
- 将目录名称中的每个
.替换为_和 - 用
_替换文件名中的每个.,但最后一个 我将不胜感激。
【问题讨论】:
-
我认为,如果您阅读有关 find 工作原理的详细信息,您将能够调整您的第二个命令以执行您想要的操作。类似于将一些值传递给 -name 标志以仅查找不是“。”的目录。目录应该可以工作。