regex - 在带有 mv 的 bash 中使用正则表达式

标签 regex bash file-rename batch-rename mv

我有 4 个文件要重命名:

./01:
I0010001  I0020001

./02:
I0010001  I0020001

我想给每个文件添加辅助文件名.dcm,所以我试过:

$ mv \(*/*\) \1.dcm
mv: cannot stat '(*/*)': No such file or directory

$ mv \(./*/*\) \1.dcm
mv: cannot stat '(./*/*)': No such file or directory

$ mv \(./\*/\*\) \1.dcm
mv: cannot stat '(./*/*)': No such file or directory

$ mv "\(./*/*\)" "\1.dcm"
mv: cannot stat '\(./*/*\)': No such file or directory

$ mv 0\([1-2]\)/I00\([1-2\)]0001 0\1/I00\20001.dcm
mv: cannot stat '0([1-2])/I00([1-2)]0001': No such file or directory

$ mv "0\([1-2]\)/I00\([1-2\)]0001" "0\1/I00\20001.dcm"
mv: cannot stat '0\([1-2]\)/I00\([1-2\)]0001': No such file or directory

$ mv "0\([1-2]\)/I00\([1-2]\)0001" "0\1/I00\20001.dcm"
mv: cannot stat '0\([1-2]\)/I00\([1-2]\)0001': No such file or directory

$ mv "0\([[:digit:]]\)/I00\([[:digit:]]\)0001" "0\1/I00\20001.dcm"
mv: cannot stat '0\([[:digit:]]\)/I00\([[:digit:]]\)0001': No such file or directory

$ mv "0\([1-2]\)\/I00\([1-2]\)0001" "0\1/I00\20001.dcm"
mv: cannot stat '0\([1-2]\)\/I00\([1-2]\)0001': No such file or directory

$ mv \(*\) \1.dcm
mv: cannot stat '(*)': No such file or directory

它们都没有产生我想要的结果。

最佳答案

这里你真的不需要正则表达式,用一个for循环就很简单了:

for f in 0[12]/I00[12]0001 ; do mv "$f" "${f}.dcm" ; done

对于更复杂的情况,您应该查看rename 程序(在某些系统上为prename),它使用强大的Perl 正则表达式来处理重命名。虽然这里没有必要,但这个简单的案例将使用:

pax> rename -n 's/$/.dcm/' 0[12]/I00[12]0001
rename(I01/I0010001, I01/I0010001.dcm)
rename(I01/I0020001, I01/I0020001.dcm)
rename(I02/I0010001, I02/I0010001.dcm)
rename(I02/I0020001, I02/I0020001.dcm)

-n 是 Debug模式(打印会发生什么但实际上 不重命名)。满意后将其删除。

关于regex - 在带有 mv 的 bash 中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214552/

相关文章:

regex - 大写字母的 .NET Regex 负前瞻

java - 数字/货币格式

php - 似乎无法正确使用正则表达式模式

linux - 避免 col 的 32KB 长度限制

bash - 打开二进制文件 : does not exist when executing pandoc in Gitlab CI bash script

python - 更改多个文件的后缀

android - 我可以以编程方式重命名可移动 SD 卡上的文件吗

regex - htaccess 替换查询和重定向中的字符

linux - 如何在 shell 脚本中动态生成新的变量名?

linux - 根据条件在 Linux 中重命名文件名