我正在尝试查找具有特定扩展名的文件。例如,我想查找所有名为 Robert 的 .pdf 和 .jpg 文件
我知道我可以执行此命令
$ find . -name '*.h' -o -name '*.cpp'
但除了扩展名之外,我还需要指定文件本身的名称。我只是想看看是否有一种可能的方法来避免一次又一次地写入文件名谢谢!
iname
- 这是不区分大小写。
iname
还是 name
取决于您要查找的内容。我一直处于案件至关重要的情况。
我的偏好:
find . -name '*.jpg' -o -name '*.png' -print | grep Robert
使用 find
的 -regex
参数:
find . -regex '.*/Robert\.\(h\|cpp\)$'
或仅使用 -name
:
find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \)
find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)
-o
表示 OR
条件,您可以在大括号内添加任意数量的条件。因此,这意味着要查找名称中任何位置包含“Robert”一词且名称以“pdf”或“jpg”结尾的所有文件。
作为在 find
上使用 -regex
选项的替代方法,由于问题标记为 bash,您可以使用大括号扩展机制:
eval find . -false "-o -name Robert".{jpg,pdf}
eval
或 .
,或者您的 find
是更复杂的东西的别名,或者您没有在您的 Linux 版本上使用普通的 GNU find
。
find
不支持 -false
。我通过给出两个相互排斥的条件来解决这个问题,所以它们都是错误的:-inum 1 -inum 2
。
作为脚本,您可以使用:
find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print
保存为 findcc
chmod 755 查找
并将其用作
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)$'
使用 bash 通配符(如果 find
不是必须的)
ls Robert.{pdf,jpg}
使用 ls 递归:(-al 用于包含隐藏文件夹)
ftype="jpg"
ls -1R *.${ftype} 2> /dev/null
find -exec ...
jpg
或png
作为较长路径的一部分,则此方法效果不佳。