这很好用:
ls /path/{foo,bar}/
现在,如果我想有效地做到这一点该怎么办:
cp /path/foo/bunch/of/stuff/foo.txt /path/bar/bunch/of/stuff/bar.txt
我可以在单个命令行上做一些速记吗?
即有点像cp /path/{foo,bar}/file.txt
,但是哪里有两个替换必须同时完成?
实际上,我想要多个耦合的支撑扩展,但不会产生所有可能的组合。
答案1
替换可以包括/
:
cp /path/{foo/foo,bar/bar}.txt
相当于
cp /path/foo/foo.txt /path/bar/bar.txt
另一种方法是搜索和替换;只要“foo”不包含斜杠,这就有效:
set /path/foo/bunch/of/stuff/foo.txt; cp $1 ${1//foo/bar}
答案2
一种方法是使用历史互动,但对于当前行 ( !#
):
$ echo /path/foo/bunch/of/stuff/foo.txt !#:1:gs/foo/bar/
echo /path/foo/bunch/of/stuff/foo.txt /path/bar/bunch/of/stuff/bar.txt
!#
正如已经说过的,指的是当前行:1
到第一个词:s/foo/bar
替代bar
foo
g
是一个修饰符,可以对整行进行替换