如何对子目录使用“重命名”命令

如何对子目录使用“重命名”命令

在这个关于重命名带有尾随空格的文件夹的帖子中,有一个对我非常有用的答案: 删除文件或文件夹名称中的前导或尾随空格

我不知道如何更改以下命令以便它也更改子文件夹中的名称。

重命名 -n 's/*$//'*

我显然已经尝试用“rename -h”自己检查这一点,但我看不到解决方案。

有人可以帮我弄这个吗?

提前谢谢您,

克里斯

答案1

您可能只需要启用globstar bash shell 的选项然后使用**/*而不是*

shopt -s globstar
rename -n 's/ *$//' **/*
  • 其中-n选项为试运行。

答案2

如果您的子文件夹以及文件可能以尾随空格结尾(如评论中所述),那么您将需要处理目录树深度优先1.您可以使用以下命令执行此find操作:

find . -depth -name '* ' -execdir rename -n 's/ *$//' {} +

您可以.用特定的起始目录替换(当前目录)path/to/dir

使用-execdir而不是-exec确保替换仅应用于文件或目录名称(而不是整个路径),因此即使正则表达式模式未锚定到文件名也是安全的。


1.否则测试时没问题-n,但实际应用时可能会失败,因为它将尝试重命名名称已经更改的目录中的文件

答案3

首先,让我们看看您对该rename命令的使用。我将其更改为匹配带或不带扩展名的文件的尾随空格:

rename -n 's/( +?)(?=\.[^.]*$|$)//' *

然后要对所有文件和子文件夹中的文件进行操作,可以使用命令find查找特定路径中的所有文件或目录

find . -type f 
find . -type d

并使用-execfind 的子命令对这些文件或目录进行操作。将 rename 命令放在exec子命令之后。例如:

find . -type f -exec rename -n 's/( +)(?=\.[^.]*$|$)//' {} +

相关内容