在对文件进行操作之前检查文件是否存在

在对文件进行操作之前检查文件是否存在

在我的一个流程中,我检查是否存在超过 31 天的文件,然后对它们进行处理。

find /my/directory/*txt -mtime +31 -exec ls -l {} \;

如果文件位于 中,那么所有这些都很好/my/directory/,但是当不存在文件时,我会收到错误:

find: `/my/directory/*txt': No such file or directory

如果我发出:

touch /my/directory/a_new_file.txt

并再次运行相同的命令

find /my/directory/*txt -mtime +31 -exec ls -l {} \;

没有错误。

有没有办法在尝试对文件进行任何操作之前验证目录中是否存在文件?

答案1

事情不是这样的find。第一个参数是要搜索的目录(或单个文件名)。如果你想给出模式,你应该使用-nameor-iname-regex或类似的选项。例如:

find /my/directory/ -name "*txt" -mtime +31 -ls

我还更改-exec ls {} \;为使用-lsfind 选项,它可以更有效地执行相同的操作。

唯一的检查方法是先运行一个ls或另一个find,这似乎很愚蠢,以避免出现完全无害的错误消息。

如果需要,您还可以使用以下命令指定您正在查找普通文件,无目录等-type

find /my/directory/ -type f -name "*txt" -mtime +31 -ls

这将找到所有.txt文件,包括 子目录中的文件/my/directory,如果这不是您想要的,请指定最大深度:

find /my/directory/ -maxdepth 1 -type f -name "*txt" -mtime +31 -ls

相关内容