我想在目录文件夹中找到 MAIN.TXT 文件。如果早于 24 小时,则向 MAIN.txt 文件输出 YES。如果 24 小时内未修改,则保留该文件。
我到目前为止:
find /directory -type f -mtime +1 -exec echo 'YES' > /directory/MAIN.txt \;
MAIN.TXT 文件早于 24 小时,因此可以正常工作。这会将 MAIN.TXT mod 时间更新为当前时间,并且我的 MAIN.txt 文件中包含 YES。
如果 MAIN.TXT 比 24 小时新,它仍然用空白 txt 修改 MAIN.TXT 并更改修改时间。
我知道我需要一个条件,但我似乎不明白它的去向。此外,我的导师在我的 ECHO 参数中提到了 {},但如果我这样做,那么我会得到附加了 AVAILABLE 的文件名。
答案1
马克的回答似乎有点达不到OP的要求。
在终端提示符下尝试一下这个衬垫。它更简单,而且可能更健壮。
[ $(find /path/to/directory/. -maxdepth 1 -type f -name MAIN.TXT -daystart -mtime +1) ] \
&& printf "YES" > /full/path/to/directory/MAIN.TXT
解释一下,首先查看单行中较大的块,然后进入每个块:
- 一个衬垫作为形式
[ block1 ] && block2
- 该构造
[ block1 ]
(带空格!)是一个布尔逻辑运算符,相当于test
内置运算符。 - 如果 block1 的执行返回某些内容(任何内容),则结果为
[ block1 ]
TRUE。如果它没有返回任何内容(如 中所示)""
,则先前测试的结果为 FALSE。 - 逻辑运算符
&&
in反映了如果 A 的退出状态为or 则A && B
执行 B 的事实。因此,如果执行为 TRUE,则 block2 也会被执行。0
TRUE
[ block1 ]
- block1 作为形式
$( )
。这是命令替换。括号内的所有内容都会被执行,并且输出将替换命令。这就是它被称为“命令替换”的原因。 - 在 block1 中,被替换的 cmd 包括查找文件:
- 其类型是
regular file
- 命名的
MAIN.TXT
- 目录内
/path/to/directory/.
- 不低于上面指定的目录级别 (
-maxdepth 1
) -mtime +1
其修改时间距今日时间 ( )至少 24 小时 ( )-daystart
。如果没有-daystart
您的搜索,则会查找 24 小时前修改的文件,但从昨天 0 点时间。
- 其类型是
答案2
[ $(find /directory -type f -mtime +1 | wc -l) -gt 0 ] && echo 'YES' > /directory/MAIN.txt