我想对系统中的所有文件进行检查。为此,我需要系统中所有文件的完整路径。我最初的想法是做这样的事情:
for file in $(sudo find / ); do
if [ -d $file ]; then
and so on.
但后来我读到,以这种方式处理 find 的输出是不好的做法。那什么才是正确的做法呢?
(我尝试了诸如 ls -RF | grep "/$" 之类的东西。但是,这只给了我目录名称,但我需要系统中每个文件、目录等的完整路径。)
答案1
使用 find 的 -exec 选项。您的示例脚本将写为:
sudo find / -type d -exec myprog {} \;
{} 将被找到的每个文件(本例中为目录)替换。
如果您想根据每个条目是目录还是常规文件还是其他内容来执行不同的操作,您可以将该逻辑放入“myprog.sh”中,或者仅使用不同的类型选择多次调用 find 。
编辑:对于单实例脚本选项,请将 myprog 编写为:
#! /bin/bash -
while IFS= read -rd '' FILE; do
if [ -d "$FILE" ]; then
...
done
并打电话
find / -print0 | myprog
(如果您不支持,则替换-print0
为)。-exec printf '%s\0' {} +
find
-print0
答案2
如果你想打印所有文件
find / -type f