Две связанные замены в одной командной строке?

Это отлично работает:

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 но где есть две замены, которые необходимо выполнить одновременно?

Фактически, я хочу, чтобы множественные связанные расширения фигурных скобок не приводили к появлению всех возможных комбинаций.

  • Как выполнить специальное слово в bash
  • В bash вывод данных из одной командной строки в другую в другую команду
  • Можно ли запустить fc, не показывая мои введенные команды?
  • Поймать и украсить каждую команду до выполнения
  • Обработка ответа «Да / Нет» от пользователя Bash
  • Переместите все файлы в новый каталог, за исключением этого каталога
  • путь к файлу в переменной с пользовательского ввода
  • Повторно заменять строку
  • 2 Solutions collect form web for “Две связанные замены в одной командной строке?”

    Подстановка может включать / :

     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} 

    Один из способов – использовать взаимодействие с историей , но для текущей строки ( !# ):

     $ 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 является модификатором, который делает замену по всей линии
    Linux и Unix - лучшая ОС в мире.