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

今日遇到的 wsl bash 执行 find 命令的问题,没正面解决

  •  
  •   hwdq0012 ·
    nocanstillbb · 13 小时 44 分钟前 · 474 次点击

    之前在写的 linux 程序会调 bash + find 命令批量改文件的后辍名

    find /path2myDir/predict/labels -name \"*.txt\" -exec sh -c 'mv \"$0\"  \"${0%.txt}.predict\"' {} \\;
    

    改为 windows 版本后, bash -c "command" 换成了 wsl bash -c "command..."
    其他的命令都执行很正常,但这条重命令的命令一直失败,于是加了-x 把 wsl 执行的命令打印出来

    "+ find /path2myDir/predict/labels -name '*.txt' -exec sh -c 'mv \"/bin/bash\" \"/bin/bash.predict\"' '{}' ';'
    

    不知道为什么$0变成/bin/bash\ , 我尝过把$0 改为 1 也没有用

    折腾了很久,最后在 wsl 里安装了 rename , 用 rename 指改了

    11 条回复    2025-08-28 23:26:45 +08:00
    guanzhangzhang
        1
    guanzhangzhang  
       13 小时 9 分钟前
    因为变量先被本地展开了
    hwdq0012
        2
    hwdq0012  
    OP
       13 小时 1 分钟前
    @guanzhangzhang #1 $0 被替换为/bin/bash ,这确实很像被提前展开, 但 ${0%.text}.predict 都也被替换为/bin/bash/.predict 了
    skiy
        3
    skiy  
       12 小时 44 分钟前
    可以让 AI 教你用 PowerShell 来改。虽然跟 linux 命令和参数用法不一样,但应该更好实现。最近改了几个 ps1 ,感觉还可以。就是英文不太好,参数和命令用的都是单词,没有短参。
    hwdq0012
        4
    hwdq0012  
    OP
       12 小时 37 分钟前
    @skiy #3 倒不是不可以, 不过为了规避 docker desktop 的 license , 目前在 wsl 里安装了 docker CE , 且 windows 还有个问题就是我知道是 utf8 ,windows 是 utf8 ,如果用 Powershell 或 cmd , 进程接到的 标准流需要做编码转换 ,所以就继续用 bash 了
    fuzzsh
        5
    fuzzsh  
       12 小时 35 分钟前 via Android
    看着像将命令写入文件,wsl 执行就运行
    hwdq0012
        6
    hwdq0012  
    OP
       12 小时 31 分钟前
    @fuzzsh #5 可以在 cmd 或 powershell 里直接 wsl ls -l > 1.txt ,没有写文件
    skiy
        7
    skiy  
       12 小时 29 分钟前
    @hwdq0012 Windows 下有几个问题:VSCode 创建的文件默认是 CRLF ,不是 Linux 等平台的 LF 。
    另外,我在 wsl 装不上 docker 。好像是缺了虚拟化的东西。现在解决方案还是得装一个 Docker Desktop 。

    你可以试试在 git bash 中执行命令行。基本的 linux 命令都可用。
    hwdq0012
        8
    hwdq0012  
    OP
       12 小时 25 分钟前
    @skiy #7:VSCode 创建的文件默认是 CRLF 这个是操作系统决定的,linux 默认 utf8 + LF ,mac 默认 utf8+ CR ,windows 默认根据语言地区 + CRLF, wsl2 + windows 版本都满足条件,bios 里打开 cpu 虚拟化后,才能在 wsl 里安装 docker
    zed1018
        9
    zed1018  
       12 小时 1 分钟前
    @hwdq0012 #3 podman desktop 我记得也是有 wsl backend 的
    Need4more
        10
    Need4more  
       11 小时 45 分钟前 via iPhone
    cmd 的 forfiles 命令
    guanzhangzhang
        11
    guanzhangzhang  
       9 小时 31 分钟前
    @hwdq0012 #2 windows 安装个 git bash 吧,或者自带的 powershell ,或者编译型语言 golang 写个试试
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3908 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 00:57 · PVG 08:57 · LAX 17:57 · JFK 20:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.