V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zjvbqla
V2EX  ›  问与答

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

  •  
  •   zjvbqla · 2022-07-29 13:56:30 +08:00 · 1353 次点击
    这是一个创建于 844 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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...

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

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

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

    前不久正好也有这个需求, 这个工具可以通过类似 vim 编辑, 用 vim 来批量重命名, 使用 visual line mode 可以快速加个前缀
    root01
        19
    root01  
       2022-07-29 17:01:49 +08:00
    拖把更名器,你值得拥有
    「拖把更名器.exe 」 https://www.aliyundrive.com/s/gnNeZAA4ps2 提取码: shun
    点击链接保存,或者复制本段内容,打开「阿里云盘」 APP ,无需下载极速在线查看,视频原画倍速播放。
    me1ons
        20
    me1ons  
       2022-07-29 17:03:30 +08:00   ❤️ 1
    shll: ls |xargs -i -p sh -c "cd {} && rename s/^/{}/ * "
    me1ons
        21
    me1ons  
       2022-07-29 17:04:49 +08:00
    -p 是查看即将执行命令(输入 Y 执行) 立即执行的话直接去掉 -p
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5334 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:30 · PVG 15:30 · LAX 23:30 · JFK 02:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.