これはうまくいきます:
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
、同時に行われるべき2つの交換はどこにありますか?
実際には、複数の結合された中括弧拡張が必要ですが、可能なすべての組み合わせが生成されるわけではありません。
答え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
1つの方法は次のとおりです。歴史的相互作用ただし、現在の行(!#
)の場合:
$ 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
行全体を置き換えることができる修飾子です。