我正在尝试查找具有特定扩展名的文件。
例如,我要查找所有名为Robert的.pdf和.jpg文件
我知道我可以执行此命令
$find . -name '*.h' -o -name '*.cpp'
但是我需要指定扩展名之外的文件本身的名称。
我只想看看是否有一种避免重复写入文件名的方法
谢谢 !
复制此命令或其下面任何命令的任何人都应改用iname-不区分大小写。
好一点,艾迪生(因此+1)。 但是,OP似乎希望使用大写R来命名名为Robert的文件。据我解释,这意味着不应输出包含robert的文件。 罗伯特写的是什么。 但是,在某些情况下,有人希望找到罗伯特或罗伯特。 也许OP处于这种情况。 使用iname还是name取决于要查找的内容。 我曾遇到过案件至关重要的情况。
我的偏好:
find . -name '*.jpg' -o -name '*.png' -print | grep Robert
效果很好,但缺点是它使您无法执行find -exec ...
如果我想在特定路径的所有文件夹中找到所有xxx-deployment.yml文件怎么办?
如果您将jpg或png作为较长路径的一部分,则此方法将无法正常工作。
使用find的-regex参数:
find . -regex '.*/Robert\.\(h\|cpp\)$'
或仅使用-name:
find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \)
作为在find上使用-regex选项的替代方法,由于该问题被标记为bash,因此可以使用大括号扩展机制:
eval find . -false"-o -name Robert".{jpg,pdf}
查找报告"路径必须在表达式之前",这是什么问题?我通常添加引号来解决它,但不适用于此表达式。谢谢!
我怀疑您是否忘记了上面命令中的eval或.,或者您的find是更复杂内容的别名,或者您没有在Linux版本上使用普通的GNU find。
感谢您的答复,我使用了一个像这样的脚本:FILEEXTEIONS = cs,[ch] eval find。 -false" -o -name *"。{$ FILEEXTEIONS},它将报告该错误。
据我所知,大括号内不会发生变量扩展。
哦,我继续尝试eval find。 -false" -o -name *"。{cs,config},它报告相同的错误。
如果使用的是全局扩展字符,则在传递给eval时使用\对其进行转义。
终于评估。 -false" -o -name *"。{cs,config}现在可以了,非常感谢!
我想在Android Shell中使用此技术,但其find不支持-false。为此,我给出了两个互斥的条件,因此它们都是错误的:-inum 1 -inum 2。
find -name"*Robert*" \( -name"*.pdf" -o -name"*.jpg" \)
-o表示一个OR条件,您可以在括号内添加任意数量的内容。因此,这意味着要在名称中的任意位置查找所有包含单词" Robert"且名称以" pdf"或" jpg"结尾的文件。
这个问题/答案显示了如何在正则表达式中使用find:如何在find命令中使用正则表达式?
模式可能像
'^Robert\\.\\(h|cgg\\)$'
使用bash遍历(如果不是必须find)
ls Robert.{pdf,jpg}
作为脚本,您可以使用:
find"${2:-.}" -iregex".*${1:-Robert}\.\(h\|cpp\)$" -print
将其另存为findcc
chmod 755 findcc
并用作
findcc [name] [[search_direcory]]
例如
findcc # default name 'Robert' and directory .
findcc Joe # default directory '.'
findcc Joe /somewhere # no defaults
请注意,您不能使用
findcc /some/where #eg without the name...
也可以选择使用
find"$1" -print | grep"$@"
和
findcc directory grep_options
喜欢
findcc . -P '/Robert\.(h|cpp)$'