例如,我想我有一个包含以下文件夹的目录
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/_/-/.还有另一种方法吗?
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当然.
字符串操作的有用参考,包括替换:操作字符串.