如何删除某个目录(在 Mac 终端中)-unix 中文件名的最后 n 个字符?

Posted

技术标签:

【中文标题】如何删除某个目录(在 Mac 终端中)-unix 中文件名的最后 n 个字符?【英文标题】:How can I remove the last n characters of filenames in a certain directory (in Mac terminal)- unix? 【发布时间】:2018-11-05 22:56:41 【问题描述】:

我正在尝试使用“mv”重命名,因为“rename”命令在我的 Mac 终端中不起作用。

我有一堆名为

的文件
DTM001_ACGGT-TTAGGC.fq
DTM156_GGTTG-ACAGTG.fq

...等

我希望将它们重命名为

DTM001.fq
DTM156.fq

我想更简单的方法是删除文件扩展名前的最后 13 个字符?

我尝试了这些链接:

mac os x terminal batch rename Rename file by removing last n characters Removing last n characters from Unix Filename before the extension

但没有一个对我有用,可能是因为我不完全了解如何针对我的特定案例处理答案,或者某些答案使用了我无法访问的“重命名”命令。

【问题讨论】:

【参考方案1】:

macOS 终端只是一个称为 shell 的交互式程序的接口。默认 shell 的名称是 bash

您要查找的内容称为 shell 脚本或 bash 脚本,用于重命名文件。

你提到的问题都有答案。重申:

cd directory_with_the_files
for file in *.fq; do
    mv -vn "$file" "$file%_*.fq"
done

您可以在命令行中输入全部内容,或将其放入文件并执行:

bash file_containing_the_commands

这将遍历当前目录中的所有.fq 文件,并将它们重命名为您想要的名称。 -vmv 的选项只是意味着在发生重命名时打印它(有助于知道它正在做某事),-n 标志意味着不要意外覆盖任何文件(以防你输入错误的内容或遇到重复的数字)。

所有的魔法都发生在$file%_*.fq,上面写着 “删除第一个 _ 之后的所有内容并添加 .fq 回来”。这称为“shell 参数扩展”,您可以在Bash Reference Manual 中了解更多信息。它的措辞有些迟钝,但这里是这个特定用例的相关部分:

$参数%

单词被扩展以产生一个 模式就像在文件名扩展中一样。如果模式匹配 参数的扩展值的尾部,然后是结果 展开式是 parameter 的值与最短匹配 模式(“%”案例)已删除。

【讨论】:

这很好,但是,你能提供一个我的文件名的具体例子吗?我收到这条消息:`$file': not a valid identifier 我尝试将 $file 更改为 $DTM。我还尝试将 $file 更改为 $DTM??? 对不起,我弄错了。它应该是 file,而不是 for 构造中的 $file。我已经更新了答案。 其实只是一个随意的名字;如果你真的想的话,你可以把它改成puppy。我们称它为file 只是因为它有助于使程序更易于理解。当for 循环遍历目录中的文件时,它告诉程序用它正在处理的变量填充一个名为file 的变量。您可以使用 $name$name 语法从该变量中提取内容。这有点令人困惑,但错误是我们试图将此变量的名称设置为“变量file 中的任何内容”,这不是我们打算做的。【参考方案2】:

最简单的方法是使用rename - 有关在 Mac 上的安装,请参阅末尾的说明。

因此,在回答您的问题时,您可以看到如果替换(该命令实际上是 s for "substitute")从第一个下划线到结尾的所有内容会发生什么带有.fq的文件名:

rename --dry-run  's/_.*/.fq/'   *fq

'DTM001_ACGGT-TTAGGC.fq' would be renamed to 'DTM001.fq'
'DTM156_GGTTG-ACAGTG.fq' would be renamed to 'DTM156.fq'

如果看起来不错,请删除 --dry-run 并再次运行它。


如果您安装了rename,则可以在您的 Mac 上使用它。默认情况下,Apple 不提供带有 macOS 的包管理器。所以,很多人从the homebrew website 使用homebrew

如果你有这个,你可以简单地安装rename

brew install rename

然后,您将拥有一个包管理器,并且您可以从各种可爱的软件中受益,包括 Apple 提供的所有您最喜欢的过时、古老版本的工具的最新版本:

php Perl ImageMagick GNU sed GNU awk GNU 查找 GNU 并行 zeromq htop socat 袜子 ffmpeg youtube-dl 禅度 redis 嗯 蚊子 氧气 pandoc 等

【讨论】:

以上是关于如何删除某个目录(在 Mac 终端中)-unix 中文件名的最后 n 个字符?的主要内容,如果未能解决你的问题,请参考以下文章

求mac终端给某个用户管理员权限的命令,

macbook怎么利用终端删除文件?

如何在 Mac 上恢复 .bash_profile?我的unix终端都没有工作[关闭]

如何在 Unix 控制台或 Mac 终端上运行 shell 脚本?

如何从 mac 中完全删除 NPM 包?

Mac OS X终端的常用操作命令(UNIX指令)