我搜索了一些文件,我想用其他文件中的新内容替换旧内容,所以我有
#!/bin/bash
find /home/old -path "*$1" -exec cat /home/new/$1 > {} \;
当我执行时:
> sh find.sh 'blam.php'
问题是脚本正在使用find.sh
在同一目录中创建一个名为{}的文件答案 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
。