如何使用查找和重命名重命名多个文件

如何使用查找和重命名重命名多个文件

我想从所有文件中取出 .hs。为什么这个命令不能正常工作?它留下相同名称的文件。

find . -type f -exec rename .hs ' ' * \;

答案1

代替:

find . -type f -exec rename .hs ' ' * \;

和:

find . -type f -exec rename .hs '' {} \;

-exec命令中,您希望文件名所在的位置应标有{}.

另外,因为我猜测您想要.hs删除而不是用空格替换,所以我们删除了单引号之间的空格。

文档

man find包括该选项的解释-exec

-执行命令;
执行命令;如果返回 0 状态则为 true。 find 的所有以下参数都被视为命令的参数,直到;遇到由以下组成的参数。 该字符串{} 将替换为命令参数中出现的当前正在处理的文件名,不仅仅是在单独使用它的参数中,如 find 的某些版本。这两种结构可能都需要转义(用\)或引用,以保护它们免受 shell 的扩展。有关使用 -exec 选项的示例,请参阅示例部分。对于每个匹配的文件,指定的命令运行一次。该命令在起始目录中执行。使用 -exec 操作存在不可避免的安全问题;你应该使用该-execdir 选项。 [强调。]

答案2

使用Shell(Ksh、Bash、ksh93、mksh、zsh)模式替换扩展 ${var/Pattern/Replacement}(第一场比赛图案, 之内变量替换为替代品。或者${var//Pattern/Replacement};全球替换。所有比赛图案, 之内变量替换为替代品。如果替代品被省略,那么匹配图案被替换为没有什么,即删除。)

find . -type f -exec bash -c 'echo mv "$1" "${1/.sh/}"' _ {} \;

Ps,删除echo以重命名文件。

相关内容