단일 명령줄에 두 개의 결합 대체가 있습니까?

단일 명령줄에 두 개의 결합 대체가 있습니까?

이것은 훌륭하게 작동합니다:

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/barbar대사foo
  • g전체 라인을 대체할 수 있는 수정자입니다.

관련 정보