Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Bash 想知道“查找”命令什么时候找不到任何内容吗_Bash - Fatal编程技术网

Bash 想知道“查找”命令什么时候找不到任何内容吗

Bash 想知道“查找”命令什么时候找不到任何内容吗,bash,Bash,有没有办法让find命令在找不到匹配项时返回值?基本上,我有一个旧备份,我想在我当前的计算机上搜索其中的每个文件。下面是我打算用的一种俗气的方式: 首先从主目录运行以下命令: $ ls -lR * > AllFiles.txt; 这将生成当前计算机上所有文件的列表 接下来,为备份中的每个文件运行以下脚本: #! /bin/bash if ! grep $1 ~/AllFiles.txt; then echo file $1 not found; exit 1; fi 当

有没有办法让find命令在找不到匹配项时返回值?基本上,我有一个旧备份,我想在我当前的计算机上搜索其中的每个文件。下面是我打算用的一种俗气的方式:

首先从主目录运行以下命令:

$ ls -lR * > AllFiles.txt;
这将生成当前计算机上所有文件的列表

接下来,为备份中的每个文件运行以下脚本:

#! /bin/bash
if ! grep $1 ~/AllFiles.txt; then
    echo file $1 not found;
    exit 1;
fi

当然,这是笨重的,它不考虑文件名的变化,但它已经足够接近了。或者,我想为每个备份文件执行一个find命令。

如果使用标准gnu find,则可以使用标准返回值测试,例如:

find . ! -readable -prune -o -name 'filenameToSearch.ext'
然后使用以下命令检查返回值:

echo $?

如果0以外的任何值表示未找到匹配项。

如果使用标准gnu查找,则可以使用标准返回值测试,例如:

find . ! -readable -prune -o -name 'filenameToSearch.ext'
然后使用以下命令检查返回值:

echo $?

如果0以外的任何值表示未找到匹配项。

如果我理解正确

grep -r valueORpatternToSearchinTEXT $(find . -type f) |wc -l

这将查找您所在的工作/现有目录中的每个文件及其子目录,搜索您需要的内容,然后计算行数,如果未找到,最后将得到0。如果你想知道发现了什么以及在哪里,请先拆下管道,然后再拆。

如果我理解正确的话

grep -r valueORpatternToSearchinTEXT $(find . -type f) |wc -l

这将查找您所在的工作/现有目录中的每个文件及其子目录,搜索您需要的内容,然后计算行数,如果未找到,最后将得到0。如果要查看找到的内容和位置,请先删除管道,然后再删除。

退出状态如果成功处理所有文件,则查找状态为0的退出,如果发生错误,则查找状态大于0的退出。这是一个非常宽泛的描述,但如果返回值非零,则不应依赖于find结果的正确性。
它没有说明find是否真的找到了任何东西…@anishsane,在搜索文件名时不正确。有关详细信息,请参见人工查找。$
find-readable-prune-o-name QKJFDQWWQEW;echo$?
给了我
0
。。。查找版本:
find(GNU findutils)4.4.2
另外,我没有将其别名为任何其他内容。我看不到任何基于是否找到匹配文件的退出状态:。顺便说一句,我的第一条评论是来自
manfind
“如果返回值非零,则不应依赖find结果的正确性”
这意味着如果
find
输出可靠(即未找到任何匹配文件),则退出状态为零。
exit status find在成功处理所有文件后退出,状态为0,如果发生错误,则大于0。这是一个非常宽泛的描述,但如果返回值非零,则不应依赖于find结果的正确性。
它没有说明find是否真的找到了任何东西…@anishsane,在搜索文件名时不正确。有关详细信息,请参见人工查找。$
find-readable-prune-o-name QKJFDQWWQEW;echo$?
给了我
0
。。。查找版本:
find(GNU findutils)4.4.2
另外,我没有将其别名为任何其他内容。我看不到任何基于是否找到匹配文件的退出状态:。顺便说一句,我的第一条评论是来自
manfind
“如果返回值非零,则不应依赖find结果的正确性”
这意味着如果
find
输出是可靠的(即未找到任何匹配文件),则退出状态为零。通过
grep传递输出。
如果有任何输出,grep将产生零退出状态,如果你想让你的成绩慢10倍或更多,那么非零。Grep就行了。好吧,那么这个怎么样
perl-e'my$t=1;while(){$t=0;print;}退出$t;'通过
grep传递输出。
如果有任何输出,grep将产生零退出状态,否则非零。如果您希望结果慢10倍或更多,grep将工作。好的,那么这个如何
perl-e'my$t=1;while(){$t=0;print;}退出$t;'