如何使用 bash 脚本重命名多个 Linux 文件

如何使用 bash 脚本重命名多个 Linux 文件

我有

123myfile123.jpg
123456myfile567.jpg

我想删除第一个 alpha 字符之前的所有内容

myfile123.jpg
myfile567.jpg

我有这个可以删除所有 0-9

mv '123myfile123.jpg' $(echo '123myfile123.jpg' | sed -e 's/[0-9]//g')

myfile,jpg我需要的结果myfile123.jpg

对此的任何帮助都非常感激。

答案1

这只是一个建议。可能有更有效的方法来做到这一点,但我希望它能帮助你......

for i in $(find . -type f -name '*.jpg'); do mv -v $i $(echo $i | sed 's/\.\/[0-9]\+\(.*.jpg\)/\1/g'); done

对命令做一点解释:

我们首先循环遍历find命令的每个结果,它与每个.jpg文件匹配。

示例输出:

./123myfile567.jpg
./123456myfile567.jpg

然后\.\/[0-9]\+\(.*.jpg\)正则表达式执行以下工作:

  • ./一开始就匹配了。
  • 我匹配一个或多个[0-9],使用+
  • 我选择我想继续使用的部分(),稍后将其称为\1

[编辑]

还有一个工具调用rename并且也基于正则表达式的使用。我希望它能帮助一些人。

答案2

您可以安装renameLarry Wall 的 Perl 版本。

它可以从存储库 Universe 安装在 Ubuntu 中。 (getpack现在是自己的 shellscript,如果您愿意,可以在此处添加(或链接到)。)我认为您rename也可以在其他 Linux 发行版中安装。

$ getpack rename
lrwxrwxrwx 1 root root 24 jan 10  2023 /usr/bin/rename -> /etc/alternatives/rename
lrwxrwxrwx 1 root root 20 jan 10  2023 /etc/alternatives/rename -> /usr/bin/file-rename
-rwxr-xr-x 1 root root 4529 okt 31  2021 /usr/bin/file-rename
-------------------------------------------------------------------
/usr/bin/file-rename: Perl script text executable
-------------------------------------------------------------------
 package: /path/program  [for command 'rename']
 rename: /usr/bin/file-rename 
-------------------------------------------------------------------
type: rename is /usr/bin/rename

$ apt-cache policy rename
rename:
  Installerad: 1.30-1
  Kandidat:    1.30-1
  Versionstabell:
 *** 1.30-1 500
        500 http://se.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
        500 http://se.archive.ubuntu.com/ubuntu jammy/universe i386 Packages
        100 /var/lib/dpkg/status

sudo apt install rename

然后您可以使用该选项检查“试运行”-n

$ rename -n 's/^[0-9]*//' *myfile*.jpg
rename(123456myfile567.jpg, myfile567.jpg)
rename(123myfile123.jpg, myfile123.jpg)

当看起来不错时,删除-n并执行它,重命名文件。

rename 's/^[0-9]*//' *myfile*.jpg

目标文件*myfile*.jpg应该根据您的实际目标文件进行修改,也许只是简单地修改*.jpg

相关内容