如何从“查找”中排除所有“拒绝权限”消息?


794

我需要隐藏以下所有拒绝权限的消息:

find . > files_and_folders

我正在尝试何时出现此类消息。我需要收集所有不会出现的文件夹和文件。

是否可以将权限级别定向到files_and_folders文件?

如何同时隐藏错误?

Answers:


259

注意:
*这个答案可能比用例需要的要深,并且find 2>/dev/null在许多情况下可能已经足够了。对于跨平台的观点及其对某些高级Shell技术的讨论,尽管寻找的方案可能是假设性的,但仍可能会引起人们的兴趣,以便找到一种尽可能健壮的解决方案。
* 如果您的系统配置为显示本地化的错误消息,请在find下面的调用前面加上LC_ALL=CLC_ALL=C find ...),以确保报告了英语消息,从而可以grep -v 'Permission denied'正常工作。但是,无论如何,任何确实显示的错误消息将同时以英语显示。

如果您的外壳是bashorzsh,则有一个解决方案既健壮又相当简单find使用POSIX兼容功能;尽管bash它本身不是POSIX的一部分,但大多数现代Unix平台都附带了它,从而使该解决方案可广泛移植:

find . > files_and_folders 2> >(grep -v 'Permission denied' >&2)

注意:完成的某些grep输出很有可能会 find完成到达,因为整体命令不会等待内部命令>(...)完成。在中bash,您可以通过附加| cat到命令来防止这种情况。

  • >(...)是(很少使用的)输出 过程替换,允许将输出(在这种情况下,将stderr output(2>)重定向到内部命令的stdin >(...)
    除了bashzsh原则上ksh也支持它们,但尝试将它们与从stderr(如此处()所示)似乎被静默忽略(在中)。2> >(...)ksh 93u+

    • grep -v 'Permission denied'过滤-vfind包含短语的所有行(从命令的stderr流中),Permission denied并将剩余的行输出到stderr(>&2)。

这种方法是:

  • 健壮的grep仅适用于错误消息(不适用于文件路径和错误消息的组合,有可能导致误报),并且除权限被拒绝的错误消息之外的其他错误消息也将传递到stderr。

  • free-find of -effect::保留退出代码:无法访问遇到的至少一个文件系统项会导致退出代码1(尽管它不会告诉您除许可被拒绝之外的其他错误是否也发生了)。


符合POSIX的解决方案:

完全符合POSIX的解决方案有局限性或需要其他工作。

如果find的输出是在被捕获文件反正(或完全抑制),然后从基于管线的解决方案乔纳森·莱弗勒的回答很简单,健壮,符合POSIX标准:

find . 2>&1 >files_and_folders | grep -v 'Permission denied' >&2

请注意,重定向的顺序很重要:2>&1必须优先

将stdout输出预先捕获在文件中,允许通过管道2>&1发送错误消息,然后可以明确地对其进行操作。grep

唯一的缺点是,整体退出代码将是grep命令的,不是find的,在这种情况下是指:如果有没有在所有或错误,允许被拒绝的错误,退出代码会被1(信号失效),否则(错误(权限被拒绝的错误除外)0-与意图相反。
也就是说,find退出代码无论如何都很少使用,因为它通常只传递基本信息(例如,通过不存在的路径)之外的少量信息。
但是,具体情况甚至只有一些输入路径不可访问由于缺乏权限的反映在find的退出代码(在GNU和BSD find):如果出现权限被拒绝的错误任何处理的文件的,退出代码被设定为1

以下变体可以解决:

find . 2>&1 >files_and_folders | { grep -v 'Permission denied' >&2; [ $? -eq 1 ]; }

现在,退出代码指示是否发生了 错误以外的任何其他错误Permission denied1如果是,0否则。
换句话说:退出代码现在反映了该命令的真实意图:0如果完全没有错误或发生了权限被拒绝的错误,则报告成功()。
可以说,这比仅通过find顶部的解决方案传递退出代码更好。


gniourf_gniourf在评论中提出了(还是POSIX兼容的)这种解决方案采用先进的重定向的泛化,这与打印文件路径的默认行为作品甚至标准输出

{ find . 3>&2 2>&1 1>&3 | grep -v 'Permission denied' >&3; } 3>&2 2>&1

简而言之:自定义文件描述符3用于临时交换stdout(1)和stderr(2),因此错误消息可以grep通过stdout 传递给管道。

如果没有这些重定向,数据(文件路径)错误消息都将grep通过stdout 传递到管道,grep然后将无法区分错误消息 Permission denied名称恰好包含短语的(假设)文件Permission denied

但是,与第一种解决方案一样,报告的退出代码将是grep,而不是find,但是可以应用与上述相同的解决方案。


现有答案的注释:

  • 关于Michael Brux的答案,有几点要注意find . ! -readable -prune -o -print

    • 它需要GNU find ; 值得注意的是,它不适用于macOS。当然,如果您只需要使用该命令来使用GNU find,这对您就不会有问题。

    • 有些Permission denied错误可能仍然浮出水面:find ! -readable -prune报告当前用户确实具有权限但缺少(可执行)权限的目录项的此类错误。原因是因为目录本身可读的,所以不执行,并且尝试进入该目录会触发错误消息。就是说,典型的情况是缺少许可。rx-pruner

    • 注意:以下几点是有关原理和/或特定用例的问题,您可能会决定它与您无关,并且该命令非常适合您的需求,尤其是仅打印路径就是您所做的一切时:

      • 如果将允许拒绝的错误消息的过滤概念化,这是您希望能够应用于任何命令的单独任务,那么主动防止允许拒绝的错误的相反方法是在命令中引入“噪声” ,这还会引入复杂性和逻辑陷阱 findfind
      • 例如,对Michael的回答(在撰写本文时),投票最多的评论试图显示如何通过包含过滤器来扩展命令-name,如下所示:
        find . ! -readable -prune -o -name '*.txt'
        但是,这不能按预期工作,因为需要尾随-print操作(可以在此答案中找到解释)。这样的微妙之处可能会引入错误。
  • 在第一个解决方案乔纳森·莱弗勒的回答find . 2>/dev/null > files_and_folders如他自己陈述, 一味沉默所有的错误信息(和解决方法很麻烦并没有完全健壮,他也解释了)。实用地说,这是最简单的解决方案,因为您可能会满意地假设所有错误都与权限相关。

  • 雾的回答sudo find . > files_and_folders简洁,务实的,但不明智的不仅仅是任何其他打印的文件名,出于安全方面的原因:是因为你作为运行用户,“你可能有你的整个系统在发现bug被搞砸了或恶意版本,或不正确的调用会意外写入某些内容,如果您以正常特权运行此文件,则不会发生”(摘自Tripleee关于Mist的回答的评论)。

  • 在第二个解决方案viraptor的答案find . 2>&1 | grep -v 'Permission denied' > some_file运行误报的风险(由于通过管道传送输出和错误的混合),以及潜在的,而不是报告旁边的输出路径通过stderr -permission被拒绝的错误,捕捉他们在输出文件中。


4
只是一个简单的问题:你为什么要使用一个替代的过程,而不仅仅是一个管道:find . 2>&1 > files_and_folders | grep -v 'Permission denied' >&2
gniourf_gniourf

2
@LéoLéopoldHertz준영:如果您不想输出到外部文件,只需执行更多操作即可:{ find . 3>&2 2>&1 1>&3 | grep -v 'Permission denied' >&3; } 3>&2 2>&1
gniourf_gniourf 2016年

2
@LéoLéopoldHertz준영:只是它符合POSIX。进程替换>(...)是特定于Bash的。
gniourf_gniourf

2
我不确定find应该强调并宣传出口代码的保留:find众所周知,出口代码是没有用的。在这里,它很可能会变成非零值(并且毫无用处)。
gniourf_gniourf

3
POSIX明确需要execute/search文件模式权限才能“搜索”目录(检索包含的文件的inode)。find这样做是为了进入一个子目录(除了需要read获得列出目录中文件的权限之外)。这不是“错误”或“移植错误”。
wjordan '16

542

采用:

find . 2>/dev/null > files_and_folders

Permission denied当然,这不仅隐藏了错误,而且还隐藏了所有错误消息。

如果您确实想保留其他可能的错误,例如符号链接上的跳数过多,而没有权限被拒绝的错误,那么您可能需要大胆地猜测您没有很多称为“权限被拒绝”的文件并尝试:

find . 2>&1 | grep -v 'Permission denied' > files_and_folders

如果您严格只想过滤标准错误,则可以使用更精细的构造:

find . 2>&1 > files_and_folders | grep -v 'Permission denied' >&2

find命令的I / O重定向是:2>&1 > files_and_folders |。管道将标准输出重定向到grep命令,并首先应用。的2>&1发送标准误差相同的地方标准输出(管)。的> files_and_folders发送标准输出(但不是标准误差)到一个文件。最终结果是,写入标准错误的消息将通过管道发送,并将的常规输出find写入文件。在grep标准输出(你可以决定如何选择性,你希望它是,并且可能不得不改变取决于语言环境和O / S的拼写)和最终过滤器>&2表示尚存的错误消息(写入标准输出)再次变为标准错误。最终重定向在终端上可以看作是可选的,但在脚本中使用它是一个很好的主意,以使错误消息出现在标准错误上。

根据您要执行的操作,此主题有很多变体。它可以在带有Bourne Shell派生类(Bash,Korn等)和POSIX兼容版本的Unix的任何变体上运行find

如果您希望适应系统上的特定版本find,则可能有其他选择。find特别是GNU ,有许多其他版本中没有的选项-请参阅当前接受的答案中的一组这样的选项。


9
如果您像我一样,请注意缺少空间很重要!2>/dev/null,没有空间!
2013年

20
2>是,没有任何空间的单个单元; 您可以在文件名和文件名之间留一个空格。与其他重定向类似,例如2>&1(将标准错误重定向到与标准输出相同的位置),或2>&-将标准错误关闭,等等。有关其余的详细信息,请参阅重定向。(上面的代码是类似POSIX的通用外壳,不特定于bash。)
Jonathan Leffler 2013年

3
我必须使用大写字母P,因为这是我的终端将输出的内容:find。2>&1 | grep -v'权限被拒绝'
David Doria 2014年

4
这是如何接受的解决方案?1)您将所有错误重定向到dev / null 2)您正在过滤明确的错误字符串!众所周知,这取决于它们的脆弱性,如果文件位于名为“ permission被拒绝”的目录中,该怎么办?糟糕!
Gunchars

10
我反对grepping错误字符串来修改程序的输出。它在大多数情况下都可以使用,但是简单的方法不是正确的解决方案(以下是找到烫发的方法)。举个例子,为什么该操作在OSX上不起作用,因为错误是“权限被拒绝”。对于在错误字符串中甚至有微小差异的任何其他系统也一样(国际化吗?)
Gunchars 2014年

285

采用:

find . ! -readable -prune -o -print

或更一般地

find <paths> ! -readable -prune -o <other conditions like -name> -print
  • 避免“权限被拒绝”
  • 并且不要抑制(其他)错误消息
  • AND并获得退出状态0(“所有文件已成功处理”)

适用于:find(GNU findutils)4.4.2。背景:

  • -readable测试匹配可读文件。!当test为false时,运算符返回true。并! -readable匹配不可读的目录(&files)。
  • -prune操作不会下降到目录中。
  • ! -readable -prune 可以翻译为:如果目录不可读,请不要进入该目录。
  • -readable测试考虑了访问控制列表和该-perm测试忽略的其他权限伪像。

有关更多详细信息,另请参见find(1)联机帮助页


6
差异已经提到。如果您听不懂,那么答案可能对您没有帮助?STDOUT是相同的-STDERR是不同的(您通过此答案得到其他错误消息)-$?是不同的(此答案为0“成功”,当没有其他错误发生时-重定向到dev / null时总是> 0“不成功”)-也许有人需要“正确” $?在脚本中
Michael Brux 2014年

6
@Masi最明显的缺陷是乔纳森(Jonathan)的答案(grep -v)将排除包含“权限被拒绝”的文件名:)
水果

65
我觉得在这里添加适当的内容是,如果您需要添加其他搜索条件,则应使用以下方法-ofind . ! -readable -prune -o -name '*.txt'
tempestadept 2015年

22
请注意,POSIX find不包括在内-readable。无论是否find为BSD,因此Mac OS X的(我不知道其他系统)。因此,在您find保证有GNU的情况下,这很好用,但是如果您不能保证系统已find安装GNU,则如何调整它并不明显。(它在Linux上可以正常工作;它在其他地方可能也可以不工作。)
Jonathan Leffler 2015年

6
find . ! -readable -prune -o -name '*.txt'使用find 4.2.2在Ubuntu 14.04上似乎不起作用。它似乎使人感到厌恶-name。出于某些奇怪的原因,我成功了find . \( ! -readable -prune \) -o -name '*.txt' -print
使用

110

如果要从根“ /”开始搜索,则可能会看到类似以下的输出:

find: /./proc/1731/fdinfo: Permission denied
find: /./proc/2032/task/2032/fd: Permission denied

是因为允许。要解决这个问题:

  1. 您可以使用sudo命令:

    sudo find /. -name 'toBeSearched.file'

它询问超级用户的密码,当输入密码时,您将看到您真正想要的结果。如果您没有使用sudo命令的权限,这意味着您没有超级用户的密码,请首先要求系统管理员将您添加到sudoers文件中。

  1. 您可以使用将标准错误输出从(通常是显示/屏幕)重定向到某个文件,并避免在屏幕上看到错误消息!重定向到特殊文件/ dev / null:

    find /. -name 'toBeSearched.file' 2>/dev/null
  2. 您可以使用将标准错误输出从(通常显示/屏幕)重定向到标准输出(通常显示/屏幕),然后使用带有-v“ invert”参数的grep命令进行管道处理,以不显示具有“权限被拒绝”的输出行单词对:

    find /. -name 'toBeSearched.file' 2>&1 | grep -v 'Permission denied'

7
@scottmrogowski除外,但它不能回答问题... 1.请系统管理员将您添加到sudoers文件中。2.sudo find...
Stephen

1
正是我想要的!
DankMasterDan

92

我不得不使用:

find / -name expect 2>/dev/null

指定我要查找的名称,然后告诉它将所有错误重定向到/ dev / null

期望是我正在搜索的期望程序的位置。


3
@Masi,答案中的命令未使用expect。而是expect仅是此命令将尝试查找的文件的名称。
Dhruv Kapoor 2014年

2
盲目地重定向所有stderr输出以仅仅忽略一类错误消息通常是一个坏主意-您将在此过程中丢失所有其他任意错误。
Josip Rodin

59

使用2> / dev / null进行管道stderr传输/dev/null

find . -name '...' 2>/dev/null


2
即使在Mac OSX上,这对我也很好。甚至find . -name '...' -print 2>/dev/null
shadowsheep,

30

您还可以使用-perm-prune谓词来避免进入不可读的目录(另请参见如何从查找程序中删除“ permission否认”的打印输出语句?-Unix&Linux Stack Exchange):

find . -type d ! -perm -g+r,u+r,o+r -prune -o -print > files_and_folders

4
-perm -g+r,u+r,o+r仅匹配为文件的r所有三个安全主体设置(读取)权限的文件,这与当前用户是否可以读取该文件没有直接关系。它可能会丢失当前用户可以读取的文件,也可能会匹配他们无法读取的文件。
mklement0

我认为find . -type d ! \( -perm -u+r -o -perm -g+r -o -perm -o+r \) -prune -o -print这将是一个很好的解决方案。
Mattia72 '16

2
@ Mattia72:不,这是根本不可能完全效仿-readable-perm-见我以前的评论,并考虑这个例子:echo 'hi' > file; sudo chown nobody:nobody file; sudo chmod o-r file; find file -perm -u=r打印file,因为它的用户阅读位,但它涉及到的nobody用户,而不是当前用户。当前用户无法读取此文件;尝试一下cat file。另请参阅:我的答案
mklement0

23

重定向标准错误。例如,如果您在UNIX机器上使用bash,则可以将标准错误重定向到/ dev / null,如下所示:

find . 2>/dev/null >files_and_folders

20

尽管上述方法不能解决Mac OS X的问题,因为Mac Os X不支持-readable切换,所以这可以避免输出中出现“权限被拒绝”错误。这可能会帮助某人。

find / -type f -name "your_pattern" 2>/dev/null

find例如,如果将其他命令与配合使用,则在目录中查找某些模式文件的大小2>/dev/null仍然可以使用,如下所示。

find . -type f -name "your_pattern" -exec du -ch {} + 2>/dev/null | grep total$

这将返回给定模式的文件总大小。请注意2>/dev/nullfind命令末尾的。


很好地绑定到OS X!乔纳森的回答解释了这一部分2>/dev/null。你能解释一下这个部分吗-exec du -ch {} + 2>/dev/null | grep total$
莱奥波尔德·赫兹(LéoLéopoldHertz),준영

1
@Masi您可以将任何命令与-exec选项一起使用,以对通过find命令找到的文件或目录采取进一步的措施。du -ch file_pattern计算每个匹配的文件的大小file_pattern,输出的最后一行是与匹配的所有文件的总数file_pattern。请参见手册页dugrep total只过滤提取总计的行(这是最后一行)。
邦蒂

13

这些错误将打印到标准错误输出(fd 2)。要过滤掉它们,只需将所有错误重定向到/ dev / null即可:

find . 2>/dev/null > some_file

或先加入stderr和stdout,然后grep删除那些特定的错误:

find . 2>&1 | grep -v 'Permission denied' > some_file

11

简单答案:

find . > files_and_folders 2>&-

2>&-关闭(-)标准错误文件描述符(2),因此所有错误消息均被静音。

  • 1如果Permission denied出现其他错误,退出代码仍将是

GNU的可靠答案find

find . -type d \! \( -readable -executable \) -prune -print -o -print > files_and_folders

将额外的选项传递给find该目录-prune(防止降序进入),但是仍然-print没有目录()同时具有和权限,或目录()任何其他文件。-typed\!-readable-executable-o-print

适用于任何POSIX兼容产品find(GNU,OSX / BSD等)的可靠答案

{ LC_ALL=C find . 3>&2 2>&1 1>&3 > files_and_folders | grep -v 'Permission denied'; [ $? = 1 ]; } 3>&2 2>&1

使用管道将标准错误流传递到,以grep删除包含'Permission denied'字符串的所有行。

LC_ALL=C使用环境变量设置POSIX语言环境3>&2 2>&1 1>&3并使用3>&2 2>&1 重复的文件描述符将标准错误流传递给grep,并[ $? = 1 ]用于[]反转所返回的错误代码,grep以近似于的原始行为find

  • 还将过滤'Permission denied'由于输出重定向导致的任何错误(例如,如果files_and_folders文件本身不可写)

您如何看待JordiFerran的回答建议?--您可以比较一下答案吗?
莱奥波尔德·赫兹(LéoLéopoldHertz),2016年

2
所述答案的shell脚本不是通用的(仅列出与$ {m_find_name}匹配的目录),并且包含与该问题不相关的几个选项(nice,/ home *,-maxdepth 5,-follow)。该答案更简洁地解决了“过滤可读但非可执行目录”的特定问题,同时又保持了通用性。
wjordan '16

1
@wjordan:谢谢。我删除了我的评论,但仍然有一点适用:-perm基于解决方案不值得介绍,因为从根本上说,它比引文所暗示的要做的事情预期的不同:这是一个纯粹的以文件为中心的测试,与文件的所有者有关和组,这两者都不具有与用户调用命令(见任何保证关系这个答案我的它看起来像你的修订GNU解决方案现在不赶权限被拒绝的错误而产生的。文件
mklement0

我无法识别您所使用的语法(既不是GNU也不是BSD),但是让我用一个自包含的示例来说明我的观点:echo 'hi' > file; sudo chown nobody:nobody file; sudo chmod o-r file; find file -perm -u=rprints file,因为它的用户读取位已设置,但与nobody用户有关,而不是当前用户。当前用户无法读取此文件;尝试一下cat file
mklement0

1
@ mklement0感谢您的讨论,我设法产生了您在另一项测试中描述的行为(不知道我第一次做错了什么),看来-perm对于确定用户的当前权限似乎无效。从此答案中删除了该替代方法。
wjordan '16

4

为了避免获得权限拒绝警告,请通过从搜索中删除不可读文件,告诉find忽略不可读文件。将表达式添加为OR,例如

find / \! -readable -prune -o -name '*.jbd' -ls

这主要是说(匹配一个不可读的文件并从列表中删除(匹配一个 * .jbd之类的名称,并显示它(带有ls))。(请记住,默认情况下,除非使用-or,否则表达式将与在一起。)您需要在第二个表达式中使用-ls,否则find可能会添加一个默认操作来显示任一匹配项,这还将显示所有不可读的文件。

但是,如果要在系统上查找真实文件,通常没有理由在/ dev中查找文件,因为它有很多文件,因此应添加一个排除该目录的表达式,例如:

find / -mount \! -readable -prune  -o  -path /dev -prune  -o  -name '*.jbd' -ls

因此(匹配列表中的不可读文件和修剪)(匹配列表中的路径/ dev和修剪)(匹配 * .jbd之类的文件并显示)


4

采用

sudo find / -name file.txt

它很愚蠢(因为您提高了搜索范围)并且不安全,但是编写起来却短得多。


您在此处搜索整个文件系统,因此用“提升搜索”来表示。您为什么称其为不安全?因为它正在搜索整个文件系统?
莱奥波德·赫兹(LéoLéopoldHertz)2014年

2
因为sudo使用root权限运行find命令,这基本上是一个坏主意。违反了隔离和最低特权原则。
薄雾

3
从根本上讲,这里的“海拔”是特权sudo。您可能会面临整个系统被错误find或恶意版本,或者意外写入内容的错误调用弄乱的情况,如果使用普通权限运行此文件,则不会发生。
2015年

2

上面的答案对我都不起作用。我在Internet上找到的一切都集中在:隐藏错误。没有正确处理流程的返回码/退出码。我在bash脚本中使用命令find查找一些目录,然后检查其内容。我使用退出代码评估命令是否成功:零值有效,否则失败。

迈克尔·布鲁克斯Michael Brux)上面提供答案有时有效。但是我有一种失败的情况!我发现了问题并亲自修复。在以下情况下,我需要修剪文件:

it is a directory AND has no read access AND/OR has no execute access

请参阅此处的关键问题是:AND / OR。我读到的一个好的建议条件序列是:

-type d ! -readable ! -executable -prune

这并不总是有效。这意味着当匹配为:

it is directory AND no read access AND no execute access

当授予读取访问权限但没有执行访问权限时,此表达式序列将失败。

经过一些测试,我意识到了这一点,并将Shell脚本解决方案更改为:

-尼斯找到/家* / -maxdepth 5 -follow \
    \(型d -a \(可读-a -executable \)! \)-prune \
    -o \
    \(型d -a可读-a -可执行文件-a -name“ $ {m_find_name}” \)-print

此处的关键是为组合表达式放置“ not true”:

has read access AND has execute access

否则,它没有完全访问权限,这意味着:修剪它。在以前建议的解决方案失败的一种情况下,这证明对我有用。

我在“评论”部分中提供了以下技术详细信息,以解决问题。如果细节过多,我深表歉意。

  • ¿为什么使用命令nice?我在这里有了主意。最初,我认为在查看整个文件系统时降低进程优先级会很好。我意识到这对我来说毫无意义,因为我的脚本仅限于几个目录。我将-maxdepth减少到3。
  • ¿为什么在/ home * /中搜索?这与此线程无关。我通过与非特权用户(不是root)一起编译的源代码手动安装所有应用程序。它们安装在“ / home”中。我可以同时存在多个二进制文件和版本。我需要找到所有目录,以主从方式检查和备份。我可以有多个“ / home”(专用服务器中运行着几个磁盘)。
  • ¿为什么使用-follow?用户可以创建指向目录的符号链接。它的有用性取决于,我需要记录找到的绝对路径。

感谢您的回答和良好的观察!我在这里悬赏,以更好地预览您的答案。我认为这是一个不错的发现,它不会阻止读取和执行访问。--请您解释一下为什么使用nicefind $HOME -maxdepth 5 -follow ...
莱奥波尔德·赫兹(LéoLéopoldHertz)2016年

2
如规定的shell脚本是不是通用的(只列出目录匹配${m_find_name}),并包含对问题不相关的几个选项(nice/home*-maxdepth 5-follow)。我添加了一个答案,可以更简洁地解决“过滤可读但非可执行目录”的特定问题,同时又保持通用性。
wjordan '16

2

您可以使用grep -v反向匹配

-v, --invert-match        select non-matching lines

像这样:

find . > files_and_folders
cat files_and_folders | grep -v "permission denied" > files_and_folders

应该去魔术


2

-=对于MacOS =-

使用别名创建新命令:只需添加〜/ .bash_profile行:

alias search='find / -name $file 2>/dev/null'

在新的“终端”窗口中,您可以调用它:

$ file=<filename or mask>; search

例如:

$ file = etc; 搜索


1

如果您使用的是CSH或TCSH,请使用以下解决方案:

( find . > files_and_folders ) >& /dev/null

如果要输出到终端:

( find . > /dev/tty ) >& /dev/null

但是,如“ csh-whynot”常见问题解答所述,您不应使用CSH。


我想grep所有txt文件并排除隐藏的文件/目录,忽略要打印的“权限被拒绝”消息。我正在使用csh shell。我使用了以下命令,但它们无法正常工作。-类型f -iname“ .txt”-非-path'* / \。'| egrep -v“权限被拒绝” find。-类型f -iname“ .txt”-非-path'* / \。'2> / dev / null出现以下错误。find:路径必须在表达式之前:2用法:find [-H] [-L] [-P] [-Olevel] [-D help | tree | search | stat | rates | opt | exec] [path ...] [表情]
yadav
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.