Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
“Linux监视命令”;没有这样的文件或目录;_Linux_Shell_Command Line - Fatal编程技术网

“Linux监视命令”;没有这样的文件或目录;

“Linux监视命令”;没有这样的文件或目录;,linux,shell,command-line,Linux,Shell,Command Line,在Linux中,我试图监视当前目录的所有子目录并输出它们的文件计数。我当前拥有的命令是: watch 'for FILE in `find . -maxdepth 1 -mindepth 1 -type d | grep -v "unwanted\|directories\|here"`; do echo -n $FILE " "; find $FILE -type f | wc -l; done | column -t' 这很好,除了偶尔我会犯这个错误 find: `FILE_NAME':

在Linux中,我试图监视当前目录的所有子目录并输出它们的文件计数。我当前拥有的命令是:

watch 'for FILE in `find . -maxdepth 1 -mindepth 1 -type d | grep -v "unwanted\|directories\|here"`; do echo -n $FILE " "; find $FILE -type f | wc -l; done | column -t'
这很好,除了偶尔我会犯这个错误

find: `FILE_NAME': No such file or directory
其中FILE_NAME是其中一个子目录中的文件名


有人知道为什么会发生这种情况以及如何解决吗?谢谢

您的命令不处理文件名中的空格

避免在$(find).中为x运行
,或者在运行循环时至少将IFS设置为
$'\n'

因为您似乎只关心直接子目录,所以您甚至不需要对循环值使用
find

watch 'for FILE in *; do [ -d "$FILE" ] && { echo -n $FILE " "; find $FILE -type f | wc -l; } done | column -t'

(您可以使用更复杂的模式,而不是
*
,或者如果需要更具体的匹配,甚至可以在循环中使用
echo“$FILE”| grep
进行过滤)

您的命令不处理文件名中的空格

避免在$(find).
中为x运行
,或者在运行循环时至少将IFS设置为
$'\n'

因为您似乎只关心直接子目录,所以您甚至不需要对循环值使用
find

watch 'for FILE in *; do [ -d "$FILE" ] && { echo -n $FILE " "; find $FILE -type f | wc -l; } done | column -t'

(如果需要更具体的匹配,您可以使用更复杂的模式而不是
*
,或者甚至在循环中使用
echo“$FILE”| grep
进行过滤)

这只使用bash内置代码(但恐怕唯一的bashism是export-f,因此如果您想将其分解成难看、不可读的一行,可以使用/bin/sh)


请注意,任何可能是带有空格的文件名都会被双引号引起来,以防止试图统计2个目录:Program和Files,而不是“Program Files”。最好的做法是双引号引用可能有分隔符的变量(顺便说一句,文件名中可以有制表符和换行符+一些非常奇怪的东西-除了“/”)这只使用bash内置项(但实际上,唯一的bashism是export-f,因此如果您想将其转换为难看、不可读的单行代码,可以使用/bin/sh)


请注意,任何可能是带有空格的文件名都会被双引号引起来,以防止试图统计2个目录:Program和Files,而不是“Program Files”。最佳做法是双引号引用可能有分隔符的变量(顺便说一句,你可以在文件名中有制表符和换行符+一些非常奇怪的东西-除了“/”之外几乎什么都有)

是否有可能
文件名
被其他文件删除?
find
有一个竞态条件,即在
find
确定文件位于请求的目录中后,但在可以使用一个原色(在本例中,
-类型f
)对其进行测试之前,可以删除该文件@chepner这可能是原因。我监视目录的原因之一是确保文件被正确清理。有解决方法吗?我不知道。这只是来自
find
的一个警告,说它再也找不到它无论如何都不会报告的文件。你可以抑制
find
的标准错误是
find$FILE-typeF2>/dev/null | wc-l;
是否有可能
FILE\u NAME
被其他东西删除了?
find
有一个竞争条件,在
find
确定某个文件在请求的目录中之后,但在可以使用其中一个原色(在本例中为f型)@chepner这可能是原因。我监视目录的原因之一是确保文件被正确清理。有解决方法吗?我不知道。这只是来自
find
的一个警告,说它再也找不到它无论如何都不会报告的文件。你可以抑制
find
的标准错误是
find$FILE-type f 2>/dev/null | wc-l;
全部为真,但不清楚包含文件名的空间是否是这里的直接问题。@SirAthos感谢您的建议。当前目录(或其子目录)中没有任何空格,但我以后会记住这一点!都是真的,但不清楚包含文件名的空间是否是这里的直接问题。@SirAthos谢谢你的建议。当前目录(或其子目录)中没有任何空间,但我以后会记住这一点!