相关疑难解决方法(0)

为什么循环查找的输出是不好的做法?

这个问题的灵感来自

为什么使用 shell 循环处理文本被认为是不好的做法?

我看到这些结构

for file in `find . -type f -name ...`; do smth with ${file}; done
Run Code Online (Sandbox Code Playgroud)

for dir in $(find . -type d -name ...); do smth with ${dir}; done
Run Code Online (Sandbox Code Playgroud)

几乎每天都在这里使用,即使有些人花时间对这些帖子发表评论,解释为什么应该避免这种东西......
看到此类帖子的数量(以及有时这些评论被简单地忽略的事实)我想我还不如问一个问题:

为什么循环find的输出是不好的做法,为 返回的每个文件名/路径运行一个或多个命令的正确方法是find什么?

find filenames files for

193
推荐指数
4
解决办法
3万
查看次数

为什么 find -mtime +1 只返回早于 2 天的文件?

我挣扎来包装我的脑海里围绕为什么find解释文件修改时间它的方式。具体来说,我不明白为什么-mtime +1不显示小于 48 小时的文件。

作为示例测试,我创建了三个具有不同修改日期的测试文件:

[root@foobox findtest]# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 25 08:44 foo1
-rw-r--r-- 1 root root 0 Sep 24 08:14 foo2
-rw-r--r-- 1 root root 0 Sep 23 08:14 foo3
Run Code Online (Sandbox Code Playgroud)

然后我用-mtime +1开关运行 find并得到以下输出:

[root@foobox findtest]# find -mtime +1
./foo3
Run Code Online (Sandbox Code Playgroud)

然后我运行 find-mmin +1440并得到以下输出:

[root@foobox findtest]# find -mmin +1440
./foo3
./foo2
Run Code Online (Sandbox Code Playgroud)

根据 find 的手册页,我知道这是预期的行为:

 -mtime n
        File’s  data was last modified n*24 hours ago. …
Run Code Online (Sandbox Code Playgroud)

find timestamps

154
推荐指数
5
解决办法
59万
查看次数

了解 `find` 的 -exec 选项

我发现自己不断地查找语法

find . -name "FILENAME"  -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

主要是因为我不明白这-exec部分是如何工作的。大括号、反斜杠和分号的含义是什么?该语法还有其他用例吗?

shell find

116
推荐指数
1
解决办法
8万
查看次数

标签 统计

find ×3

filenames ×1

files ×1

for ×1

shell ×1

timestamps ×1