如何删除某个目录(在 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
文件,并将它们重命名为您想要的名称。 -v
到 mv
的选项只是意味着在发生重命名时打印它(有助于知道它正在做某事),-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 上恢复 .bash_profile?我的unix终端都没有工作[关闭]