使用 Linux 查找

使用 Linux 查找

我想在目录文件夹中找到 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 也会被执行。0TRUE[ 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

相关内容