【发布时间】:2017-09-19 18:12:20
【问题描述】:
我有很多文件,其中都有text这个词。
点赞test text22 test.mp3
“test”可以包含各种字符 -> -/()(&%0-9...
现在我想重命名每个文件,以便在每个“文本”之前添加一个下划线,例如test_test22 test.mp4。有没有直接的方法可以做到这一点?
【问题讨论】:
我有很多文件,其中都有text这个词。
点赞test text22 test.mp3
“test”可以包含各种字符 -> -/()(&%0-9...
现在我想重命名每个文件,以便在每个“文本”之前添加一个下划线,例如test_test22 test.mp4。有没有直接的方法可以做到这一点?
【问题讨论】:
使用 Perl 的独立重命名命令:
rename -n 's/ (text[0-9]{1,2})/_$1/' *text*
如果一切正常,请删除选项-n。
【讨论】:
另一种方式来说明(通常非常有用)在 Bash 中使用正则表达式匹配。
#!/bin/bash
for file in *
do
if [[ $file =~ (.*)text(.*) ]] ; then
mv "$file" "${BASH_REMATCH[1]}text_${BASH_REMATCH[2]}"
fi
done
如果您想要做的不仅仅是重命名文件,这将特别有用。
【讨论】:
我假设您不想添加下划线,而是将前导空格替换为,就像在您的示例中一样(但它又具有 mp3 -> mp4 所以只是确保):
$ ls
test text22 test.mp3
text22 test.mp3
$ for f in *text*; do "echo ${f/ text/_text}" ; done
test_text22 test.mp3
text22 test.mp3
到mv 用mv "$f" "${f/ text/_text}" 替换回声
【讨论】: