【问题标题】:How do you mass rename files in Linux? [duplicate]如何在 Linux 中批量重命名文件? [复制]
【发布时间】:2015-08-15 11:04:43
【问题描述】:

有 30 个这样命名的文件:

sample_kmer_41_2.lib1.bowtie.file1.27.faabyss_sample

我需要的输出是:

abyss_sample_kmer_41_2.lib1.bowtie.file1.27.fa

我不知道该怎么做,我已经把名字搞砸了。感谢您的帮助。

【问题讨论】:

  • 使用rename命令,它允许你提供一个正则表达式替换命令。
  • 哦,酷。我每天都在这里学到一些东西!

标签: linux bash


【解决方案1】:

使用rename 实用程序:

rename 's/(.*)\.fa(.*)_sample$/$2_$1/' *

rename 是 perl 软件包的一部分,默认安装在类似 debian 的系统上。 util-linux 软件包中提供了一个不同且不兼容的 rename 实用程序。

【讨论】:

  • 这也是比我提供的 Bash 脚本更好的选择。
  • 感谢您的回答,但我相信我有不兼容的 rename 实用程序而不是 perl 包 - 我在问这个问题之前尝试了 rename,但它没有用。
【解决方案2】:

如果您有基于 Perl 的 prename(可能命名为 rename)命令,那么:

prename 's/(.*)abyss_sample$/abyss_$1/' sample_kmer_*

要使用的确切正则表达式取决于名称的损坏方式。这应该适用于给出的示例名称;它可能需要调整才能与其他名称一起使用。

【讨论】:

  • 我非常喜欢这个答案而不是我自己的答案!
【解决方案3】:

您可以使用 for 循环。因为我总是对这些东西感到紧张,所以我建议先做一个 echo 以确保一切看起来都很时髦......

#!/bin/bash
for FILE in sample_kmer_41_2*abyss_sample ; do
  NEWNAME=`echo $FILE | sed -e 's/abyss_sample//'`
  echo mv $FILE $NEWNAME
done

如果不需要调整,您可以删除echo 或根据需要进行修改。

【讨论】:

  • 当然。第一个在循环中获取当前文件名并通过 sed 发送它以去除文件名的末尾。第二个只是在控制台打印mv $FILE $NEWNAME。无论您将其提供给标准输出,Echo 都会向您“回显”。
  • @David Hoelzer 它不会运行,除非在do 之前加上一个分号并且等号从两边去掉空格。
  • @RaulLaasner 哎呀!谢谢!
猜你喜欢
  • 2016-04-09
  • 2013-12-16
  • 2014-07-19
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 2018-04-26
  • 2010-10-17
相关资源
最近更新 更多