Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 重命名目录中的文件以在破折号前后插入空格_Bash_Whitespace_File Rename_Batch Rename - Fatal编程技术网

Bash 重命名目录中的文件以在破折号前后插入空格

Bash 重命名目录中的文件以在破折号前后插入空格,bash,whitespace,file-rename,batch-rename,Bash,Whitespace,File Rename,Batch Rename,我有一个目录,其中包含以下类型的文件: 01.firstname surname-track1 name1.mp3 02.firstname surname-track2 name2.mp3 03.firstname surname-track3 name3.mp3 我正在寻找一个BASH命令来批量重命名目录中的所有文件,以便在破折号前后都有一个空格,例如: 01.firstname surname - track1 name1.mp3 02.firstname surname - track

我有一个目录,其中包含以下类型的文件:

01.firstname surname-track1 name1.mp3
02.firstname surname-track2 name2.mp3
03.firstname surname-track3 name3.mp3
我正在寻找一个BASH命令来批量重命名目录中的所有文件,以便在破折号前后都有一个空格,例如:

01.firstname surname - track1 name1.mp3
02.firstname surname - track2 name2.mp3
03.firstname surname - track3 name3.mp3

非常感谢您的帮助

按照Barmar的建议,您可以使用重命名或文件名。 就你而言:

file-rename 's/-/ - /g' *.mp3
它是基于正则表达式的,因此非常强大,因此非常危险,在运行它之前,您可以直接运行它,它将显示您的命令将要更改的内容:

file-rename -n 's/-/ - /g' *.mp3

可以使用bash参数替换:

for i in *.mp3; do mv $i ${i/-/ - }; done
或者,您可以使用rename from util linux包

rename '-' ' - ' *.mp3
或者根据上面的答案,我认为有些发行版将其命名为重命名

prename 's/-/ - /' *.mp3

使用rename命令,它允许您提供基于模式的替换。欢迎使用堆栈溢出!用于编程问题,而不是有关使用或配置Unix及其实用程序的问题。或者是回答类似问题的好地方。谢谢,但这并不是我想要的,它给出了:01-firstname姓氏-track1 name1.mp3等等。。。你能把它改成:01。名字姓氏-track1 name1.mp3?你的命令是去掉音轨号后的句点,我希望保持理想状态。谢谢您使用的是哪种重命名?utils linux中的版本不支持正则表达式。它是一个perl包:/usr/bin/file-rename-using-file::rename-version 0.20I只是在Ubuntu 18.04LTS中使用标准版本。我应该安装一个不同的吗?