之前在写的 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 指改了
![]() |
1
guanzhangzhang 13 小时 9 分钟前
因为变量先被本地展开了
|
2
hwdq0012 OP @guanzhangzhang #1 $0 被替换为/bin/bash ,这确实很像被提前展开, 但 ${0%.text}.predict 都也被替换为/bin/bash/.predict 了
|
![]() |
3
skiy 12 小时 44 分钟前
可以让 AI 教你用 PowerShell 来改。虽然跟 linux 命令和参数用法不一样,但应该更好实现。最近改了几个 ps1 ,感觉还可以。就是英文不太好,参数和命令用的都是单词,没有短参。
|
4
hwdq0012 OP @skiy #3 倒不是不可以, 不过为了规避 docker desktop 的 license , 目前在 wsl 里安装了 docker CE , 且 windows 还有个问题就是我知道是 utf8 ,windows 是 utf8 ,如果用 Powershell 或 cmd , 进程接到的 标准流需要做编码转换 ,所以就继续用 bash 了
|
5
fuzzsh 12 小时 35 分钟前 via Android
看着像将命令写入文件,wsl 执行就运行
|
![]() |
7
skiy 12 小时 29 分钟前
@hwdq0012 Windows 下有几个问题:VSCode 创建的文件默认是 CRLF ,不是 Linux 等平台的 LF 。
另外,我在 wsl 装不上 docker 。好像是缺了虚拟化的东西。现在解决方案还是得装一个 Docker Desktop 。 你可以试试在 git bash 中执行命令行。基本的 linux 命令都可用。 |
8
hwdq0012 OP @skiy #7:VSCode 创建的文件默认是 CRLF 这个是操作系统决定的,linux 默认 utf8 + LF ,mac 默认 utf8+ CR ,windows 默认根据语言地区 + CRLF, wsl2 + windows 版本都满足条件,bios 里打开 cpu 虚拟化后,才能在 wsl 里安装 docker
|
10
Need4more 11 小时 45 分钟前 via iPhone
cmd 的 forfiles 命令
|
![]() |
11
guanzhangzhang 9 小时 31 分钟前
@hwdq0012 #2 windows 安装个 git bash 吧,或者自带的 powershell ,或者编译型语言 golang 写个试试
|