• 请不要在回答技术问题时复制粘贴 AI 生成的内容
css3
V2EX  ›  程序员

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

  •  
  •   css3 · Mar 16, 2019 · 2881 views
    This topic created in 2639 days ago, the information mentioned may be changed or developed.
    存在若干文件:
    abc-192.168.1.1.txt
    abcd-192.168.1.2.txt
    想把其中的 ip 给删掉,
    变成
    abc.txt
    adcd.txt

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

    先这样看一遍确定是你想要的效果,然后去掉 -WhatIf
    wsh1108
        4
    wsh1108  
       Mar 16, 2019 via Android
    可以 rename,网上也有批量修改文件名的小工具
    css3
        5
    css3  
    OP
       Mar 16, 2019
    @geelaw 不会用,有例子吗😭
    css3
        6
    css3  
    OP
       Mar 16, 2019
    @wsh1108 要用脚本,不是一次性工作
    0ZXYDDu796nVCFxq
        7
    0ZXYDDu796nVCFxq  
       Mar 16, 2019 via Android
    ls
    for
    sed
    mv
    done
    wsh1108
        8
    wsh1108  
       Mar 16, 2019 via Android
    @css3 自己写一个咯,一个 for 里面,正则匹配替换为空不就行了么
    hanxiV2EX
        9
    hanxiV2EX  
       Mar 16, 2019 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  
       Mar 16, 2019
    如果全是例子中格式,可以直接用横线切割。。然后保留第一部分,补一个扩展名.txt

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

    播放宏
    ETiV
        15
    ETiV  
       Mar 16, 2019
    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  
       Mar 16, 2019
    任何一个语言写几句代码就能做到吧,再不行,Excel 都可以做到
    mingl0280
        17
    mingl0280  
       Mar 17, 2019
    @hanxiV2EX
    @css3
    @radc

    没那么复杂
    ls | awk -F- '{print("mv "$0" "$1".txt")}' | /bin/bash
    mingl0280
        18
    mingl0280  
       Mar 17, 2019
    如果有多于一个横杠的情况,将$1 替换成$1$2...$n,从大到小替换就完了……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   887 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 20:45 · PVG 04:45 · LAX 13:45 · JFK 16:45
    ♥ Do have faith in what you're doing.