在这个关于重命名带有尾随空格的文件夹的帖子中,有一个对我非常有用的答案: 删除文件或文件夹名称中的前导或尾随空格
我不知道如何更改以下命令以便它也更改子文件夹中的名称。
重命名 -n 's/*$//'*
我显然已经尝试用“rename -h”自己检查这一点,但我看不到解决方案。
有人可以帮我弄这个吗?
提前谢谢您,
克里斯
答案1
答案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
并使用-exec
find 的子命令对这些文件或目录进行操作。将 rename 命令放在exec
子命令之后。例如:
find . -type f -exec rename -n 's/( +)(?=\.[^.]*$|$)//' {} +