如何为当前目录中具有相同名称但下划线替换为破折号的每个目录创建符号链接?

Jas*_*ker 1 bash symlink

例如,我想我有一个包含以下文件夹的目录

foo_bar
baz
Run Code Online (Sandbox Code Playgroud)

我想要的是一个bash命令,它将创建一个符号链接foo-bar,foo_bar所以它看起来像这样:

foo-bar
foo_bar
baz
Run Code Online (Sandbox Code Playgroud)

我很确定我可以编写一个Python脚本来执行此操作,但我很好奇是否有办法用bash执行此操作.这是我被困的地方:

ls -1 | grep _ | xargs -I {} ln -s {} `{} | sed 's/_/-/'`
Run Code Online (Sandbox Code Playgroud)

我要做的是运行命令ln -s,第一个参数是目录名,第二个参数是通过的名称sed s/_/-/.还有另一种方法吗?

Cas*_*bel 5

Bash可以用字符串代替!

for path in *_*; do [ -d "$path" ] && ln -s "$path" "${path//_/-}"; done
Run Code Online (Sandbox Code Playgroud)

如果你想更有选择性地应用它,你可以做类似的事情:

find . -type d [other tests...] | while read path; do [ -d "$path" ] && ln -s "$path" "${path//_/-}"; done
Run Code Online (Sandbox Code Playgroud)

或者你的ls ... | grep ...而不是find当然.

字符串操作的有用参考,包括替换:操作字符串.