之前在写的 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 4 天前
因为变量先被本地展开了
|
2
hwdq0012 OP @guanzhangzhang #1 $0 被替换为/bin/bash ,这确实很像被提前展开, 但 ${0%.text}.predict 都也被替换为/bin/bash/.predict 了
|
![]() |
3
skiy 4 天前
可以让 AI 教你用 PowerShell 来改。虽然跟 linux 命令和参数用法不一样,但应该更好实现。最近改了几个 ps1 ,感觉还可以。就是英文不太好,参数和命令用的都是单词,没有短参。
|
4
hwdq0012 OP @skiy #3 倒不是不可以, 不过为了规避 docker desktop 的 license , 目前在 wsl 里安装了 docker CE , 且 windows 还有个问题就是我知道是 utf8 ,windows 是 utf8 ,如果用 Powershell 或 cmd , 进程接到的 标准流需要做编码转换 ,所以就继续用 bash 了
|
5
fuzzsh 4 天前 via Android
看着像将命令写入文件,wsl 执行就运行
|
![]() |
7
skiy 4 天前
@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 4 天前 via iPhone
cmd 的 forfiles 命令
|
![]() |
11
guanzhangzhang 4 天前
@hwdq0012 #2 windows 安装个 git bash 吧,或者自带的 powershell ,或者编译型语言 golang 写个试试
|
12
huangsijun17 3 天前
盲猜,$0 被 wsl 解析了,而不是 bash 。
|
13
hwdq0012 OP @huangsijun17 #12 我把$0 改为$1 ,它不会被替换为 wsl 的第二个参数(bash 的第 1 个参数)
|
14
huangsijun17 3 天前 ![]() @hwdq0012 #13 我试了一下 echo:
PS C:\Users\huang> wsl bash -c "echo $0" wsl: 检测到 localhost 代理配置,但未镜像到 WSL 。NAT 模式下的 WSL 不支持 localhost 代理。 PS C:\Users\huang> wsl bash -c 'echo $0' wsl: 检测到 localhost 代理配置,但未镜像到 WSL 。NAT 模式下的 WSL 不支持 localhost 代理。 /bin/bash PS C:\Users\huang> |
15
hwdq0012 OP ""立即解析, ' 延迟解析,和 git submodule 的 foreach 命令一样, 不过我这个' 里的命令是想让 find 解析,看来是没办法了
|
16
hwdq0012 OP @huangsijun17 #14 ""立即解析, ' 延迟解析,和 git submodule 的 foreach 命令一样, 不过我这个' 里的命令是想让 find 解析,看来是没办法了
|
17
huangsijun17 3 天前
@hwdq0012 #16 加\转译试试看?
|
18
huangsijun17 3 天前
@huangsijun17 #17 powershell 转译用`符号:
PS C:\Users\huang> wsl -- bash -c "echo `$0" wsl: 检测到 localhost 代理配置,但未镜像到 WSL 。NAT 模式下的 WSL 不支持 localhost 代理。 /bin/bash PS C:\Users\huang> |
19
hwdq0012 OP |