程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何通过bash在文件名中自动插入字符串?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何通过bash在文件名中自动插入字符串??

开发过程中遇到如何通过bash在文件名中自动插入字符串?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何通过bash在文件名中自动插入字符串?的解决方法建议,希望对你解决如何通过bash在文件名中自动插入字符串?有所启发或帮助;

我每天都有输出文件:

linux-202105200900-foo.direct.tar.gz

日期和时间字符串,例如:202105200900 将每天更改。

我需要手动将这些文件重命名为

linux-202105200900x86-foo.direct.tar.gz

(在日期/时间后插入一个短字符串 x86

任何 bash 脚本都可以帮助做到这一点?

解决方法

如果您总是在字符串中的第 18 号字符处插入字符串“x86”,您可以使用该命令:

var="linux-202105200900-foo.direct.tar.gz"
var2=${var:0:18}"x86"${var:18}
echo $var2

第 2 行的意思是:“将 var 的前 18 个字符分配给变量 var2,然后是 x86,然后是变量 var 的其余部分”

如果你想在字符串的最后一个连字符之前插入“x86”,你可以这样写

var="linux-202105200900-foo.direct.tar.gz"
var2=${var%-*}"x86-"${var##*-}
echo $var2

第二行的意思是:“赋值给变量var2:

  • 去掉末尾的最短匹配模式“-*”后变量var的内容
  • 字符串“x86-”
  • 去掉开头最长匹配模式“*-”后变量var的内容
,

除了 @jean-Loup Sabatier 的非常好的答案之外,另一种可能更通用的方法是将第二次出现的 '-' 替换为 x86-,您可以使用 {{1 }}。假设您有:

sed

您可以通过以下方式更新:

fname=linux-202105200900-foo.direct.tar.gz

它只是使用带有 fname="$(sed 's/-/x86-/2' <<< "$fname")" hereString 的命令替换来修改 sed,将修改后的结果分配回 fname

示例使用/输出

fname
,

我想尽可能简单,虑到只有时间戳会改变,这个脚本应该这样做。只需在文件所在的文件夹中运行它,您就会使用 x86 重命名所有文件。

#!/bin/bash

for file in $(ls); do
  replaced=$(echo $file | sed 's|-foo|x86-foo|g')
  mv $file $replaced
done

这是我的输出

filip@filip-ThinkPad-T14-Gen-1:~/test$ ls
linux-202105200900-foo.direct.tar.gz  linux-202105201000-foo.direct.tar.gz  linux-202105201100-foo.direct.tar.gz
filip@filip-ThinkPad-T14-Gen-1:~/test$ ./../development/bash-utils/bulk-rename.sh 
filip@filip-ThinkPad-T14-Gen-1:~/test$ ls
linux-202105200900x86-foo.direct.tar.gz  linux-202105201000x86-foo.direct.tar.gz  linux-202105201100x86-foo.direct.tar.gz

只需遍历当前文件夹中的所有文件,管道结果为 sed 以将正则表达式 -foo 替换为 x86-foo,然后使用 @H_878_5@mv 命令重命名文件。

正如 David 在评论中提到的,如果您担心 -foo 可能多次出现,那么您可以将 g为全局替换为 1 作为第一次出现,就是这样!

,

你需要这个吗?

❯ dat=$(date '+%Y%m%d%H%M%S'); echo ${dat}
20210520170336
❯ filename="linux-${dat}x86-foo.direct.tar.gz"; echo ${filename}
linux-20210520170336x86-foo.direct.tar.gz
,

除了@David C. Rankin 的非常好的答案之外,只需将其添加到循环中并重命名文件

# !/usr/bin/bash
for file in `ls linux* 2>/dev/null` # Extract all  files starTing with linux
do
echo $file
fname="$(sed 's/-/x86-/2' <<< "$file")"
mv "$file" "$fname"                 # Rename file 
done


收到的输出:
linux-202105200900x86-foo.direct.tar.gz

大佬总结

以上是大佬教程为你收集整理的如何通过bash在文件名中自动插入字符串?全部内容,希望文章能够帮你解决如何通过bash在文件名中自动插入字符串?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: