Macos 如何批量更改一组文件的第一部分';终端中的名称(编辑:OS X)?

Macos 如何批量更改一组文件的第一部分';终端中的名称(编辑:OS X)?,macos,terminal,rename,batch-processing,Macos,Terminal,Rename,Batch Processing,我有一组带有设置前缀的文件,我想在终端中同时更改所有文件的前缀。假设我想改变这个群体 01-here.md 01-is.md 01-an.md 01-example.md 对此 02-here.md 02-is.md 02-an.md 02-example.md 我正在寻找类似于mv01*.md 02*.md的东西,但这不起作用。在仔细研究之后,我发现了一种使用finder完成相同任务的简单方法,但是finder显然是为慢性子和失败者提供的,所以我仍然想知道如何“为realz”完成它 编辑:

我有一组带有设置前缀的文件,我想在终端中同时更改所有文件的前缀。假设我想改变这个群体

01-here.md
01-is.md
01-an.md
01-example.md
对此

02-here.md
02-is.md
02-an.md
02-example.md
我正在寻找类似于mv01*.md 02*.md的东西,但这不起作用。在仔细研究之后,我发现了一种使用finder完成相同任务的简单方法,但是finder显然是为慢性子和失败者提供的,所以我仍然想知道如何“为realz”完成它


编辑:使用OS X

您可以尝试以下操作(编辑答案):


您可以尝试以下方法(编辑答案):


对于您的示例情况,请尝试

for f in *.md; do echo mv "$f" "${f/2/3}"; done
(注意:echo只会告诉您将发生什么,删除它以实际重命名文件)。可以找到对这段摘录的很好的解释


另一方面,您也可以在Applescript或Automater中实现这一点,它们都为批量重命名等提供了大量功能

对于您的示例情况,请尝试

for f in *.md; do echo mv "$f" "${f/2/3}"; done
(注意:echo只会告诉您将发生什么,删除它以实际重命名文件)。可以找到对这段摘录的很好的解释


另一方面,您也可以在Applescript或Automater中实现这一点,它们都为批量重命名等提供了大量功能

我有一个名为
rename
的脚本,但是如果我没有,我会使用一个循环,类似这样:

for f in 01-*.md; do mv "$f" "${f/01/02}"; done

为此,我有一个名为
rename
的脚本,但如果我没有,我会使用一个循环,类似这样:

for f in 01-*.md; do mv "$f" "${f/01/02}"; done

最简单、最灵活的方法是使用Perl
rename
脚本。在OSX上,可以使用
自制
轻松安装

brew install rename
然后你可以做:

rename 's/01/02/' *md
如果您只想查看它将执行什么操作,而不实际执行任何操作,请使用
--dry run
选项,如下所示:

rename --dry-run 's/01/02/' 01*md
输出

'01-an.md' would be renamed to '02-an.md'
'01-example.md' would be renamed to '02-example.md'
'01-here.md' would be renamed to '02-here.md'
'01-is.md' would be renamed to '02-is.md'

如果文件的结果是相同的,那么它也不会覆盖任何文件,并且可以进行非常非常复杂的重命名。

最简单、最灵活的方法是使用Perl
重命名
脚本。在OSX上,可以使用
自制
轻松安装

brew install rename
然后你可以做:

rename 's/01/02/' *md
如果您只想查看它将执行什么操作,而不实际执行任何操作,请使用
--dry run
选项,如下所示:

rename --dry-run 's/01/02/' 01*md
输出

'01-an.md' would be renamed to '02-an.md'
'01-example.md' would be renamed to '02-example.md'
'01-here.md' would be renamed to '02-here.md'
'01-is.md' would be renamed to '02-is.md'

它也不会覆盖任何文件,如果它们的结果是相同的文件名,并且可以进行非常非常复杂的重命名。

你没有说明你使用的是什么操作系统和什么shell。他说的是“在终端中”,而不是“在终端中”(他还提到了Finder),所以我假设它是OSX。通常,[batch file]标记意味着这个问题只适用于Windows,但人们把它与[batch processing]标记混淆的程度超过了他们应该混淆的程度。这两方面都是正确的,@SomethingDark。修正了。你没有说明你使用的是什么操作系统和什么shell。他说的是“在终端中”,而不是“在终端中”(他还提到了Finder),所以我假设它是OSX。通常,[batch file]标记意味着这个问题只适用于Windows,但人们把它与[batch processing]标记混淆的程度超过了他们应该混淆的程度。这两方面都是正确的,@SomethingDark。修正了,不完全正确。这将重命名工作目录中的所有文件和文件夹,无论它们是否共享前缀。不完全相同。这将重命名工作目录中的所有文件和文件夹,无论它们是否共享前缀。