find 无法处理我的变量

find 无法处理我的变量

我正在尝试查找给定目录中的目录和文件的数量。我正在像这样运行我的 bash 脚本:

ARCHIVE=/path/to/archive ./myScript

在我的脚本中我正在这样做:

#find the number of non-empty directories in the given dir 
dirs=$(find $ARCHIVE -mindepth 1 -maxdepth 1 -not -empty -type d | wc -l)
#find the number of files in the given dir
msgs=$(find $ARCHIVE -type f | wc -l)

echo "Number of directories: $dirs"
echo "Total number of messages: $msgs"

当我在查看的数据子集上运行脚本时,这个脚本效果很好,该子集位于与脚本同一级别的目录中。但是,实际数据在其他人的目录中,当我将 ARCHIVE 变量设置为该位置并运行它时,两个值都返回 0。我也使用了一个类似的脚本,那里的 find 命令在第二个目录中也不起作用。奇怪的是,我使用了一些 egrep 命令,它们对两者都很有效。

为什么我不能以这种方式使用 find?

答案1

尝试将您想要搜索的目录作为参数传递给 bash 脚本:

#!/usr/bin/env bash

# First argument to script shall be directory in which to search
ARCHIVE=$1 

#find the number of non-empty directories in the given dir 
dirs=$(find "$ARCHIVE" -mindepth 1 -maxdepth 1 -not -empty -type d | wc -l)
#find the number of files in the given dir
msgs=$(find "$ARCHIVE" -type f | wc -l)

echo "Number of directories: $dirs"
echo "Total number of messages: $msgs"

dirfiles在我的主目录上运行名为的脚本:

$ ./dirfiles ~
Number of directories: 27
Total number of messages: 8703

还有/usr/lib

$ ./dirfiles /usr/lib
Number of directories: 161
Total number of messages: 9630

此外,还find提供了三种解析符号链接的方法:

  • -P:不跟随符号链接
  • -L:跟随符号链接
  • -H:除处理命令行参数外,不要遵循符号链接。

如果您不想关注符号链接,但$ARCHIVE恰巧有一个,那么也许-H是可行的方法。

答案2

发生这种情况可能是因为您对其他人的目录没有读取权限。如果您没有读取权限,则无法查看/搜索/查找任何内容。您可以使用以下命令检查这一点:

ls -l /home/username/directory

还要确保您搜索的文件或目录确实是文件或目录(10 个字符串权限中的第一个字符是-d不是别的东西-l在您的情况下代表符号链接)。

ls将权限显示为 10 个字符的字符串,例如-rw-r--r--。这些字符可以解释为TUUUGGGOOO

T Type
UUU   Rights for the owner of the file
GGG   Rights for users in the group
OOO   Rights for others, not listed above

电视是其中之一:

- file
d directory
c character device
b block device
l symbolic link

来源:Unix 文件权限简介

另外,当您使用:

  • find -type d- 您仅搜索目录。
  • find -type f- 您仅搜索常规文件。

相关内容