使用 Bash 修剪 Tarball 的文件名

使用 Bash 修剪 Tarball 的文件名

我需要对不同学生的一些源代码进行评分。提交过程是通过 Blackboard 进行的,它会在文件名后附加一堆不必要的内容。以下是示例:

Test Submission_adunn_attempt_2014-04-04-10-48-37_adunn-helloworld.tar.gz

我想将此文件(及所有其他文件)重命名为:

adunn-helloworld.tar.gz

我如何在 Bash 脚本中执行此操作?

答案1

您可以使用 shell 参数扩展:

$ s="Test Submission_adunn_attempt_2014-04-04-10-48-37_adunn-helloworld.tar.gz"
$ echo "${s##*_}"
adunn-helloworld.tar.gz

使用循环重命名文件:

for f in *.gz; do
  mv "$f" "${f##*_}"
done

或者,您可以使用prename(perl 分发的一部分):

rename 's/.*_//' *.gz

相关内容