rename 命令批量重命名 如何快速的把 A 目录下的这些目录中的文件名批量加个目录名做为前缀

2022-07-29 13:56:30 +08:00
 zjvbqla

rename 命令如何以目录名字为前缀 批量重命名其中文件

目录 A 下有几百个目录 1 2 3 4 5 6...300

该 300 个目录下分别有文件若干不等。并且文件名是一样的,比如 name001.mp4,name002.mp4...name099.mp4

rename 's/oldname/newname/' *.mp4

这样可以每个文件夹分别操作替换,不过需要操作 300 次。

如何快速的把 A 目录下的这些目录中的文件名批量加个目录名做为前缀, 1 目录中的变成 1name001 ,1name001...

2 目录中的变成 2name001 ,2name002...

1395 次点击
所在节点    问与答
21 条回复
UncleCat01
2022-07-29 14:05:52 +08:00
Windows 的话下载一个 total commander ,里面的重命名工具非常好用
yfugibr
2022-07-29 14:06:03 +08:00
老老实实写个脚本遍历吧
zjvbqla
2022-07-29 14:10:50 +08:00
@yfugibr 刚刚开始学,还没有会。
zjvbqla
2022-07-29 14:12:34 +08:00
@UncleCat01 windows 有是有,不过目前正在开始学 shell ,并且以后遇到的问题也不限于重命名,所以还是打算不借助现有工具
Tumblr
2022-07-29 14:14:25 +08:00
可以试试 pwsh:

gci <path> -r | % {
rni $_.FullName -NewName ((Split-Path $_.DirectoryName -Leaf) + $_.Name)
}
wudicgi
2022-07-29 14:17:46 +08:00
临时的还是长期的,甚至是要提供给别人用的?

如果是自己临时用的,怎么快怎么来吧, dir 出来按列编辑,保存成 bat 脚本执行都行
长期用,如果是自己用,也是用啥语言写脚本都可以,没必要非得 PowerShell 或 batch file
geelaw
2022-07-29 14:22:44 +08:00
@Tumblr #5 一个有趣的小知识,rename-item -newname 可以传入 scriptblock ,可以改写为

Get-ChildItem -Path 'C:\Path\To\Folder' -Recurse -File -Include 'name???.mp3' |
Rename-Item -NewName { $_.Directory.Name + $_.Name } -WhatIf

去掉 -WhatIf 真实运行。
zjvbqla
2022-07-29 14:23:50 +08:00
@Tumblr 用的是 mac ,打算从 shell 开始,才看没几页,pwsh 是 windows 下的?
yfugibr
2022-07-29 14:24:08 +08:00
@zjvbqla
```bash
for d in $(ls)
do
cd $d
rename -v "s/^/$d/" * -n
cd ..
done
```
确定没问题就去掉 -n
zjvbqla
2022-07-29 14:27:57 +08:00
@wudicgi 自己用,并且以后也会偶尔用,
@geelaw 发现菜到极点后回答也不是很看得懂。我先再学段时间基本知识才来提问。
zjvbqla
2022-07-29 14:28:51 +08:00
@yfugibr 谢谢,我试试,很惭愧 做了伸手党,
yfugibr
2022-07-29 14:28:53 +08:00
@zjvbqla #3 用 fish shell 的话是可以一行的
```fish
rename -v 's#(.+)/(.+)#$1/$1$2#' -n **
```
stoluoyu
2022-07-29 14:31:25 +08:00
会 nodejs 吗,会的话可以配合 zx ,把 js 和 bash 一块写,处理一些 bash 做起来比较麻烦的(或者说不会写)的逻辑
msg7086
2022-07-29 14:37:14 +08:00
@yfugibr 不用 fish shell 也行吧,指定*/*就行了。
yfugibr
2022-07-29 14:49:12 +08:00
@msg7086 我刚 bash 试了下没反应还以为不支持这个语法,估计是打错了
msg7086
2022-07-29 14:56:04 +08:00
@yfugibr **不支持,所以用*/*啊。
imn1
2022-07-29 15:04:45 +08:00
几乎所有语言都可以把路径视为字符串,然后用正则就行了
ltxlouis
2022-07-29 15:17:10 +08:00
[massren]( https://github.com/laurent22/massren)

前不久正好也有这个需求, 这个工具可以通过类似 vim 编辑, 用 vim 来批量重命名, 使用 visual line mode 可以快速加个前缀
root01
2022-07-29 17:01:49 +08:00
拖把更名器,你值得拥有
「拖把更名器.exe 」 https://www.aliyundrive.com/s/gnNeZAA4ps2 提取码: shun
点击链接保存,或者复制本段内容,打开「阿里云盘」 APP ,无需下载极速在线查看,视频原画倍速播放。
me1ons
2022-07-29 17:03:30 +08:00
shll: ls |xargs -i -p sh -c "cd {} && rename s/^/{}/ * "

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/869461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX