如何在 bash 中使用带有 -exec 的 'cat' 命令?
How to use 'cat' command with -exec in bash?
我搜索了一些文件,我想用其他文件中的新内容替换旧内容,所以我有
#!/bin/bash
find /home/old -path "*" -exec cat /home/new/ > {} \;
当我执行时:
> sh find.sh 'blam.php'
问题是脚本在与 find.sh
相同的目录中创建一个名为 {} 的文件
这里的问题是 > {}
是 而不是 find
命令的一部分。该脚本首先由 shell 解释,>
的含义由 shell 处理,然后将其周围的内容作为参数传递给执行:
$ set -- blam.php
$ set -x
$ find /home/old -path "*" -exec cat "/home/new/" > {} \;
+ find /home/old -path '*blam.php' -exec cat /home/new/blam.php ';'
如果您想要在其他地方复制您的文件,。
你得到的问题是 >
是 shell 语法的一部分,对于 find 命令和 exec 命令中的语法应该是文字。
您尝试做的事情可以分两步完成
- 正在生成脚本
- 正在执行脚本
.
find /home/old -path "*" -printf 'cat /home/new/'""' > %p\n' > script.sh
sh script.sh
这种方式允许检查命令,或者使用管道
find /home/old -path "*" -printf 'cat /home/new/'""' > %p\n' | sh
另一种效率较低的方法,因为每个文件 shell spwans
find /home/old -path "*" -exec sh -c 'cat "/home/new/" > {}' _ "" \;
我搜索了一些文件,我想用其他文件中的新内容替换旧内容,所以我有
#!/bin/bash
find /home/old -path "*" -exec cat /home/new/ > {} \;
当我执行时:
> sh find.sh 'blam.php'
问题是脚本在与 find.sh
相同的目录中创建一个名为 {} 的文件这里的问题是 > {}
是 而不是 find
命令的一部分。该脚本首先由 shell 解释,>
的含义由 shell 处理,然后将其周围的内容作为参数传递给执行:
$ set -- blam.php
$ set -x
$ find /home/old -path "*" -exec cat "/home/new/" > {} \;
+ find /home/old -path '*blam.php' -exec cat /home/new/blam.php ';'
如果您想要在其他地方复制您的文件,
你得到的问题是 >
是 shell 语法的一部分,对于 find 命令和 exec 命令中的语法应该是文字。
您尝试做的事情可以分两步完成
- 正在生成脚本
- 正在执行脚本
.
find /home/old -path "*" -printf 'cat /home/new/'""' > %p\n' > script.sh
sh script.sh
这种方式允许检查命令,或者使用管道
find /home/old -path "*" -printf 'cat /home/new/'""' > %p\n' | sh
另一种效率较低的方法,因为每个文件 shell spwans
find /home/old -path "*" -exec sh -c 'cat "/home/new/" > {}' _ "" \;