V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
css3
V2EX  ›  程序员

求一个删除文件名中的 ip 的命令

  •  
  •   css3 · 2019-03-16 15:18:51 +08:00 · 2395 次点击
    这是一个创建于 2111 天前的主题,其中的信息可能已经有所发展或是发生改变。
    存在若干文件:
    abc-192.168.1.1.txt
    abcd-192.168.1.2.txt
    想把其中的 ip 给删掉,
    变成
    abc.txt
    adcd.txt

    有什么方便的命令吗
    18 条回复    2019-03-17 01:22:47 +08:00
    akatquas
        1
    akatquas  
       2019-03-16 15:22:57 +08:00 via iPhone
    我也蹲一个答案(狗头
    lzoje
        2
    lzoje  
       2019-03-16 15:27:54 +08:00 via Android
    可以试试直接重命名
    geelaw
        3
    geelaw  
       2019-03-16 15:28:56 +08:00
    Get-ChildItem | Rename-Item -NewName { [regex]::Replace($_.Name, '^(.*?)-?[0-9.]+[0-9](\..*?)$', '$1$2') } -WhatIf

    先这样看一遍确定是你想要的效果,然后去掉 -WhatIf
    wsh1108
        4
    wsh1108  
       2019-03-16 15:45:47 +08:00 via Android
    可以 rename,网上也有批量修改文件名的小工具
    css3
        5
    css3  
    OP
       2019-03-16 15:46:19 +08:00
    @geelaw 不会用,有例子吗😭
    css3
        6
    css3  
    OP
       2019-03-16 15:46:31 +08:00
    @wsh1108 要用脚本,不是一次性工作
    0ZXYDDu796nVCFxq
        7
    0ZXYDDu796nVCFxq  
       2019-03-16 15:53:36 +08:00 via Android
    ls
    for
    sed
    mv
    done
    wsh1108
        8
    wsh1108  
       2019-03-16 15:54:47 +08:00 via Android
    @css3 自己写一个咯,一个 for 里面,正则匹配替换为空不就行了么
    hanxiV2EX
        9
    hanxiV2EX  
       2019-03-16 15:55:29 +08:00 via Android
    ls -1|grep '-[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | while read line;do
    newname=$(echo $line | cut -c .....)
    mv $line $newname
    done

    正则可能写的有问题,另外 cut 忘记如何把减号后面的字符串切掉了,手机上写的,自己查下 man 吧
    radc
        10
    radc  
       2019-03-16 15:57:24 +08:00
    如果全是例子中格式,可以直接用横线切割。。然后保留第一部分,补一个扩展名.txt

    for i in *-*.txt; do mv "$i" "$(echo $i | awk -F- '{print $1}').txt"; done
    busfool
        11
    busfool  
       2019-03-16 16:00:17 +08:00 via Android
    找到第一个-,找到最后一个.txt ,切割字符串
    css3
        12
    css3  
    OP
       2019-03-16 16:07:16 +08:00
    @radc 这个命令最方便,但我发现适用不了两个-的,只要删掉靠近 ip 地址的这个-
    zyp0921
        13
    zyp0921  
       2019-03-16 16:21:19 +08:00
    for i in `ls` ;do echo $i;done
    xabc
        14
    xabc  
       2019-03-16 16:38:35 +08:00 via Android
    vim 宏录制开始
    0f-ld0f.Dj
    宏录制结束

    播放宏
    ETiV
        15
    ETiV  
       2019-03-16 17:39:15 +08:00
    for i in $(find *.txt); do
    src=$i;
    dst=$(echo $i | sed -E 's;\-[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3};;g' );
    echo mv $src $dst;
    done

    想执行就去掉倒数第二行的 echo
    IP 的替换正则并不严格,999.999.999.999 的格式也会被清空
    Hopetree
        16
    Hopetree  
       2019-03-16 18:16:46 +08:00
    任何一个语言写几句代码就能做到吧,再不行,Excel 都可以做到
    mingl0280
        17
    mingl0280  
       2019-03-17 01:16:28 +08:00
    @hanxiV2EX
    @css3
    @radc

    没那么复杂
    ls | awk -F- '{print("mv "$0" "$1".txt")}' | /bin/bash
    mingl0280
        18
    mingl0280  
       2019-03-17 01:22:47 +08:00
    如果有多于一个横杠的情况,将$1 替换成$1$2...$n,从大到小替换就完了……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1525 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:06 · PVG 01:06 · LAX 09:06 · JFK 12:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.