単一のコマンドラインに2つの結合置換がありますか?

単一のコマンドラインに2つの結合置換がありますか?

これはうまくいきます:

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/barbarセリフfoo
  • g行全体を置き換えることができる修飾子です。

関連情報