如何将大量文本添加到文件名前?

如何将大量文本添加到文件名前?

假设我有一个目录,里面.md全是各种名称的文件。假设我想在每个文件名前面加上“test”。例如:文件a.mdb.md、 和c.md将变成test - a.mdtest - b.md、 和test - c.md

我如何通过命令行实现这一点?

答案1

可以直接从终端轻松输入的一行代码:

for f in *.md; do mv "$f" "test - $f"; done

或者使用分号在单独的行上重写:

for f in *.md
do
    mv "$f" "test - $f"
done

展览

for(in )的语法sh

for NAME [in WORDS ... ] ; do COMMANDS; done

这里,我们的NAMEf和我们的WORDS是当前目录中所有匹配的文件*.md。因此变量$f将被替换为每个匹配的文件*.md

因此对于a.md

mv "$f" "test - $f"

变成

mv "a.md" "test - a.md"

引号很重要,因为每个文件名$f可能包含空格。否则mv会认为每个单词都是一个单独的文件。例如,如果没有引号,并且有一个名为的文件Foo Bar.md,它将翻译为:

mv Foo Bar.md test - Foo Bar.md

这不会按预期工作。但是通过括$f在引号中,它就有意义了:

mv "Foo Bar.md" "test - Foo Bar.md"

注意的语法for,您还可以*.md通过明确命名每个文件来重命名所有文件的子集:

for f in a.md b.md d.md; do mv "$f" "Test - $f"; done

或者使用 shell 扩展:

for f in {a,b,d}.md; do mv "$f" "Test - $f"; done

答案2

如果你有prename...

prename 's/^/test - /' *.md

使用普通 shell 命令:

for file in *.md; do
    mv "$file" "test - $file"
done

答案3

mmv12也是一个很好的工具,可以完成这样的任务,应用到现在的工作中,

mmv '*.md' 'test - #1.md'

当然,如果你只想在 a.md、b.md 和 c.md 中添加“test - ”,而不是在 a1.md 中添加,则可以这样做

mmv '?.md' 'test - #1.md'

会更合适。

我确实可以建议它,特别是当您遇到许多这样的问题时。

如果你还想使用图形界面,可以尝试名称

答案4

我知道已经很晚了,但如果其他人正在寻找这样的东西,那么这对我有用:

rename '' 'name -' *.md

相关内容