批量重命名文件名中的空格为下划线

问题描述 投票:0回答:1

我有一个名为

windows
的目录,其中包含名称包含空格的文件。例如,文件可能名为
'abpk gawt yibp-877'
。我想通过用下划线替换文件名中的空格来纠正这个问题
_
。例如,名称为
'abpk gawt yibp-877'
的文件应变为
'abpk_gawt_yibp-877'
。我需要更正
windows
目录中的所有文件名。

限制:

  • 我只能执行一项命令。
  • 解决方案不得包含控制结构(if、while、for 等)。
  • 解决方案不得包含命令替换 $(...)、;、&、&&、${}、|| 等特殊字符
  • 鼓励在此任务中使用
    xargs
    sh
    命令。

我已经尝试了以下命令,但它不遵守约束,因为我无法使用

${}

find windows -type f | grep -E '.... .... ....-[0-9A-Za-z]{1,3}' | xargs -I {} bash -c 'mv "{}" "${1// /_}"' sh {} \;

我正在寻找一种尊重上述所有限制的解决方案。任何帮助或指导将不胜感激。谢谢!

linux sh xargs
1个回答
0
投票

使用内置

-regex
条件来匹配文件名,而不是通过管道传输到
grep

使用内置的

-exec
运算符执行
bash
命令来执行文件名替换和
mv
命令。

find windows -type f -regex '/.{4} .{4} .{4}-[0-9A-Za-z]{1,3}$' -exec bash -c 'mv "$1" "${1// /_}"' {} {} \;
© www.soinside.com 2019 - 2024. All rights reserved.