【问题标题】:How to execute a series of commands after the find command?find命令后如何执行一系列命令?
【发布时间】:2020-10-13 17:41:30
【问题描述】:

我知道我可以编写一个脚本来执行此操作,但必须有一种“酷”的方式。哈哈。

我想对子目录中所有 Git 存储库中的同名文件进行相同的文件更改 (sed)。所以我想做这个

$ cd repo1
$ git checkout master
$ git pull origin master
$ git checkout -b feature/issue-1234-change-url
$ find . -name application.properties | sed "s/url=https://url=https://my.oldurl-1342d3.com/my.newurl-3443493.com/g" {}+
$ cd ..
$ (do above for all subdirs)

但我想在一行中完成,所以我正在尝试这样做......

$ find . -type d -maxdepth 1 | ...... | sed "s/url=http://my.oldurl-1342d3.com/my.newurl-3443493.com/g" {}+

我错过了... 中的内容

什么是好的管道模式?还是我最好写一个 shell 脚本?

【问题讨论】:

  • 你最好写一个脚本或一个shell函数。这太多了,不能塞进一行。
  • 很高兴您在下面解决了您的问题。只是提醒一下,当您将 sed 与 s/pattern/replacment/ 形式一起使用时,任何属于您的模式或替换部分的 / 字符都需要转义。使用s@pat@repl@ 或其他不在patrepl 中的字符要简单得多。对于某些seds,您需要使用sed '\@pat@repl@(其中只有第一个@ 被转义。)祝大家好运。

标签: git macos shell sed find


【解决方案1】:

如果有人感兴趣,就像 John K 建议的那样,我最终编写了一个 shell 脚本。

#!/bin/bash

db1="sandbox-123456-mariadb-1\.cw5123456\.us-east-1\.rds\.amazonaws\.com"
db2="sandbox-aurora-1.cluster-cw12345.us-east-1.rds.amazonaws.com"

for d in */; do
  cd $d
  git checkout master
  git pull origin master
  git checkout -b feature/issue-1234-change-url
  find . -name application-sandbox.yml -exec sed -i "s/$db1/$db2/g" {} +
  cd ..
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多