Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发出Find命令Linux_Linux_Bash_Find - Fatal编程技术网

发出Find命令Linux

发出Find命令Linux,linux,bash,find,Linux,Bash,Find,我有一个文件夹,我想计算其中的所有常规文件,为此,我使用以下bash命令: find pathfolder -type f 2> err.txt | wc -l 文件夹中有3个空文本文件和一个子文件夹,其中包含其他文本文件。 因此,我应该得到3分,但我得到6分,我不明白为什么。也许有一些我没有设定的选项 如果我删除子文件夹,结果得到4个解决方案忽略以点开头的文件名 要仅统计路径文件夹中的文件,请执行以下操作: find pathfolder -maxdepth 1 -type f -n

我有一个文件夹,我想计算其中的所有常规文件,为此,我使用以下bash命令:

find pathfolder -type f  2> err.txt | wc -l
文件夹中有3个空文本文件和一个子文件夹,其中包含其他文本文件。 因此,我应该得到3分,但我得到6分,我不明白为什么。也许有一些我没有设定的选项

如果我删除子文件夹,结果得到4个解决方案忽略以点开头的文件名

要仅统计路径文件夹中的文件,请执行以下操作:

find pathfolder -maxdepth 1 -type f -not -path '*/\.*' | wc -l
要统计
pathfolder
的所有子目录中的文件,请执行以下操作:

find pathfolder -mindepth 2 -maxdepth 2 -type f -not -path '*/\.*' | wc -l
更新:将评论转换为答案

根据收到的建议,通过使用命令
touch$'foo\nbar'
创建一个虚拟文件,
wc-l
对该文件名进行两次计数,如下例所示:

$> touch $'foo\nbar'
$> find . -type f
./foo?bar
$> find . -type f | wc -l
2
为了避免这种情况,请在调用
wc
(anubhava's)之前去掉换行符:

或者完全避免呼叫
wc

$> find . -type f -exec sh -c 'i=0; for f; do ((i++)); done; echo $i' sh {} +
1

要获取当前目录中没有点文件的所有文件和目录,请执行以下操作:

shopt -u dotglob
all=(*)
要仅获取目录,请执行以下操作:

dirs=(*/)
要仅统计当前目录中的非点文件,请执行以下操作:

echo $(( ${#all[@]} - ${#dirs[@]} ))

要使用
查找
执行此操作,请使用:

find . -type f -maxdepth 1 ! -name '.*' -exec printf '%.0s.\n' {} + | wc -l

请告诉我们从
查找路径文件夹-type f
中删除
| wc-l
的输出应该会很有启发性…可能有一个隐藏的文件,您不会注意到。从中我得到了“find pathfolder-type f”:a/.DS\u存储a/1.txt a/2.txt a/3.txt a/subfolder/900.txt“a”是从开始查找的文件夹。如果文件名有换行符,则会给出错误的计数character@chatraed:带空格和换行符的文件名不是很常见,但很有可能。不,但如果文件名有换行符,则
wc-l
将该文件计为2,而不是1@anubhava:创建了一些包含空格和
\n
和观察到计数结果没有差异。无论如何,我赞成你的答案。谢谢。在空目录中,使用
touch$'foo\nbar'
命令创建一个文件,然后运行第一个
find
命令。它将打印
2
而不是
1
-printf.\n'
将比
-exec
更高效。是的,我同意,但不幸的是,
-printf
在OSX上不适用于我。是的,我想知道这是否是不可移植的。我假设您也没有
-exec+
?没有,但应该是
-exec printf%.0s。\n'+
。哦,哎呀,试试
-exec printf%.0s。\n'{}+
find . -type f -maxdepth 1 ! -name '.*' -exec printf '%.0s.\n' {} + | wc -l