find /ABC/ \
-type f \
-exec \
sh -c ' if [ echo "1" > ${1} ] ; then if [ "$(cat ${1})" != "1" ]; then [ echo ${1} ] ; fi ; fi ' _ {} \;
我的剧本想要这样做:
查找文件夹中的所有文件。将1写入文件。检查“1”是否写得不正确。打印此文件的名称。
在。我做了两个步骤。 (1)写(2)读取检查。 现在我将这两个结合起来。因为我想在写完一个文件后立即检查。
但我的剧本现在出了点问题。 需要帮忙。 谢谢。 它给出了我的错误:
sh: 1: unknown operand
我觉得有些东西不匹配/因为我对shell没有经验。需要你帮忙
答案 0 :(得分:1)
if [ echo "1" > ${1} ] ; then
[
是一个普通的命令。它几乎每个sh
内置,但它仍然正常解析。所以> ${1}
表示“将输出重定向到名称作为参数传递的文件”。如果要比较两个数字,请使用-gt
运算符:
if [ 1 -gt "$1" ]; then …
如果要将1
写入文件,请使用echo
命令,而不是[ … ]
这是条件命令(也可以在{{1}名称下调用}):
test
请注意,如果if echo 1 >"$1"; then …
成功,那么该文件可能确实包含您放在那里的文本。这不会发生的唯一时间是:
echo 1 >"$1"
是特殊文件,例如管道或设备(由于它们不会被$1
匹配而不会发生); 答案 1 :(得分:0)
试试这个:
find . -type f -exec sh -c 'echo "1" >> "${1}"; if [ "$(cat ${1})" != "1" ]; then echo "${1}" ; fi' _ {} \;
我没有测试你的命令,因为它从一开始看起来不正确。
但有几点说明:
echo "1" > "${1}"
会破坏文件。如果要追加,请使用>>
。
[
是一个命令(也称为test
。
then [ echo ${1} ]
错误地使用此测试。你不需要在这里进行测试。
根据其他答案,您不需要if [ echo...
,所以我完全接受了if测试。