我最喜欢的“技巧”实际上是一个小型 shell 脚本。我编写了一个名为“supersplice”的快速脚本,它接受 sed 样式的搜索/替换表达式和文件名列表。运行时,它将该表达式应用于列出的每个文件。它在每个文件上运行 sed(将输出发送到临时文件,然后将临时文件复制到原始文件上)。
对于在大批文件中进行大规模搜索/替换更改非常方便,尤其是在与 find 或“grep -Rl”之类的命令结合使用以提供文件名列表时。
当然,当它搞砸时,这样的命令非常危险。 在我的例子中,我通常针对受版本控制的文件运行它。 因此,我首先会执行“git add”或“git commit”来快照我当前的状态。 然后我运行 supersplice 并使用“git diff”来检查结果,如果它搞砸了,则使用其他 git 命令来撤消损坏。
几十年前,当许多 cp 选项不存在时,使用 tar 的两个实例克隆目录的技巧奏效了。特别是那些保留用户/组/权限的选项,那些复制符号链接(而不是跟随它们)的选项以及制作备份类型克隆所需的其他选项。
今天,它的大部分都可以使用 cp 的“-a”和“-R”选项来完成,但这还是一个相对较新的创新。
撰写的评论
我最喜欢的“技巧”实际上是一个小型 shell 脚本。我编写了一个名为“supersplice”的快速脚本,它接受 sed 样式的搜索/替换表达式和文件名列表。运行时,它将该表达式应用于列出的每个文件。它在每个文件上运行 sed(将输出发送到临时文件,然后将临时文件复制到原始文件上)。
对于在大批文件中进行大规模搜索/替换更改非常方便,尤其是在与 find 或“grep -Rl”之类的命令结合使用以提供文件名列表时。
当然,当它搞砸时,这样的命令非常危险。 在我的例子中,我通常针对受版本控制的文件运行它。 因此,我首先会执行“git add”或“git commit”来快照我当前的状态。 然后我运行 supersplice 并使用“git diff”来检查结果,如果它搞砸了,则使用其他 git 命令来撤消损坏。
几十年前,当许多 cp 选项不存在时,使用 tar 的两个实例克隆目录的技巧奏效了。特别是那些保留用户/组/权限的选项,那些复制符号链接(而不是跟随它们)的选项以及制作备份类型克隆所需的其他选项。
今天,它的大部分都可以使用 cp 的“-a”和“-R”选项来完成,但这还是一个相对较新的创新。