如何使用' cat'在bash中使用-exec命令?

时间:2018-04-24 10:49:24

标签: linux bash sh exec

我搜索了一些文件,我想用其他文件中的新内容替换旧内容,所以我有

#!/bin/bash
find /home/old -path "*$1" -exec cat /home/new/$1 > {} \;

当我执行时:

> sh find.sh 'blam.php'

问题是脚本正在使用find.sh

在同一目录中创建一个名为{}的文件

2 个答案:

答案 0 :(得分:2)

你得到的问题是>是shell语法的一部分,对于exe命令中的find命令和语法应该是文字。

您要做的事情可能分两步完成

  • 生成脚本
  • 执行脚本

find /home/old -path "*$1" -printf 'cat /home/new/'"$1"' > %p\n' > script.sh
sh script.sh

这种方式允许检查命令,或使用管道

find /home/old -path "*$1" -printf 'cat /home/new/'"$1"' > %p\n' | sh

另一种效率较低的方法,因为为每个文件spowan一个shell

find /home/old -path "*$1" -exec sh -c 'cat "/home/new/$1" > {}' _ "$1" \; 

答案 1 :(得分:1)

这里的问题是> {} 不是 find命令的一部分。该脚本首先由shell解释,>的含义由shell处理,然后将其作为执行参数传递给它:

$ set -- blam.php
$ set -x
$ find /home/old -path "*$1" -exec cat "/home/new/$1" > {} \;
+ find /home/old -path '*blam.php' -exec cat /home/new/blam.php ';'

如果您想在其他地方复制文件,use cp