<分区>
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 没有经验。需要你们帮忙
if [ echo "1" > ${1} ] ; then
[
是一个普通的命令。它是几乎所有 sh
中的内置函数,但仍能正常解析。所以 > ${1}
的意思是“将输出重定向到名称作为参数传递的文件”。如果要比较两个数字,请使用 -gt
运算符:
if [ 1 -gt "$1" ]; then …
如果你想将 1
写入文件,使用 echo
命令,而不是 [ … ]
这是条件命令(也可以在名称 test
下调用):
if echo 1 >"$1"; then …
请注意,如果 echo 1 >"$1"
成功,那么该文件很可能确实包含您放置在那里的文本。唯一不会发生这种情况的情况是:
- 如果
$1
是一个特殊文件,例如管道或设备(这不会发生,因为它们不会被 -type f
匹配);<
- 如果生活在一个特殊的文件系统上,您从文件中读取的内容不是最后写入的内容——这将是一个奇怪的文件系统,而不是用于磁盘存储的文件系统;
- 如果其他程序在此期间修改了文件,由于时间窗口小,这不太可能,但并非不可能。