重命名 BASH 中的多个文件

发布于 2024-08-24 13:13:01 字数 345 浏览 7 评论 0原文

我想重命名文件编号:我有一个带有“???”的文件格式我需要将它们放入'??????'。

myfile_100_asd_4 to myfile_0100_asd_4

谢谢 阿曼.

不太优雅的解决方案:

#/bin/bash
snap=`ls -t *_???`
c=26 
for k in $snap 
do 

     end=${k}
     echo  mv  $k ${k%_*}_0${k##*_}_asd_4
     (( c=c-1 ))

done

这对我有用,因为我也有 myfile_100 文件。

I would like to rename files numbering: I have a files with '???' format I need to put them in '????'.

myfile_100_asd_4 to myfile_0100_asd_4

Thanks
Arman.

Not so elegant SOLUTION:

#/bin/bash
snap=`ls -t *_???`
c=26 
for k in $snap 
do 

     end=${k}
     echo  mv  $k ${k%_*}_0${k##*_}_asd_4
     (( c=c-1 ))

done

This works for me because I have myfile_100 files as well.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不一样的天空 2024-08-31 13:13:01

使用 rename,perl 附带的一个小脚本:

rename 's/(\d{3})/0$1/g' myfile_*

如果在表达式之前传递 -n 参数,它只会打印它会执行的重命名操作,不会执行任何操作。这样您可以在重命名文件之前验证它是否正常工作:

rename -n 's/(\d{3})/0$1/g' myfile_*

Use rename, a small script that comes with perl:

rename 's/(\d{3})/0$1/g' myfile_*

If you pass it the -n parameter before the expression it only prints what renames it would have done, no action is taken. This way you can verify it works ok before you rename your files:

rename -n 's/(\d{3})/0$1/g' myfile_*
挽梦忆笙歌 2024-08-31 13:13:01

只需使用外壳,

for file in myfile*
do
    t=${file#*_}
    f=${file%%_*}
    number=$(printf "%04d" ${t%%_*})
    newfile="${f}_${number}_${t#*_}"
    echo mv "$file" "$newfile"
done

just use the shell,

for file in myfile*
do
    t=${file#*_}
    f=${file%%_*}
    number=$(printf "%04d" ${t%%_*})
    newfile="${f}_${number}_${t#*_}"
    echo mv "$file" "$newfile"
done
夜灵血窟げ 2024-08-31 13:13:01

有一个名为 ren (manpage) 的 UNIX 应用程序,它支持使用搜索和替换模式重命名多个文件。您应该能够拼凑出一个模式,将额外的 0 注入到文件名中。

编辑:带有下载链接的项目页面可以在 Freshmeat 找到。

There's a UNIX app called ren (manpage) which supports renaming multiple files using search and substitution patterns. You should be able to cobble together a pattern that will inject that extra 0 into the filename.

Edit: Project page w/ download link can be found at Freshmeat.

沧笙踏歌 2024-08-31 13:13:01

尝试:

for file in `ls my*`
do
a=`echo $file | cut -d_ -f1`
b=`echo $file | cut -d_ -f2`
c=`echo $file | cut -d_ -f3,4`

new=${a}_0${b}_${c}
mv $file $new
done

Try:

for file in `ls my*`
do
a=`echo $file | cut -d_ -f1`
b=`echo $file | cut -d_ -f2`
c=`echo $file | cut -d_ -f3,4`

new=${a}_0${b}_${c}
mv $file $new
done
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文