我有
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
您可以安装rename
Larry 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
。