我想查找特定扩展名的文件。 例如,我想查找所有以Robert命名的.pdf和.jpg文件。
我知道我可以使用以下命令:
$ find . -name '*.h' -o -name '*.cpp'
除了扩展名,我需要指定文件本身的名称。我想知道是否有可能避免反复书写文件名称。
我的偏好:
find . -name '*.jpg' -o -name '*.png' -print | grep Robert
jpg
或png
,那么这种方法可能不太有效。 - AutonomousApps使用 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
表示“或”条件,你可以在大括号内添加任意数量的条件。因此,这句话的意思是查找所有文件名中包含单词“Robert”的文件,并且它们的文件名以“pdf”或“jpg”结尾。
find
命令时,替代使用-regex
选项的一种选择,因为这个问题标记为bash,你可以使用花括号扩展机制:eval find . -false "-o -name Robert".{jpg,pdf}
eval
或者上述命令中的 .
,要么你的 find
是某个更复杂的别名,或者你没有在你的 Linux 版本上使用标准的 GNU find
。 - jxhfind
不支持“-false”。为了解决这个问题,我给出了两个互斥条件,使它们共同为false:“-inum 1 -inum 2”。 - starfryfind "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print
findcc
chmod 755 findcc
然后使用它:
findcc [name] [[search_direcory]]
e.g.
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)$'
ls Robert.{pdf,jpg}
使用ls递归:(-al包括隐藏文件夹)
ftype="jpg"
ls -1R *.${ftype} 2> /dev/null
iname
,它是不区分大小写的。 - Addisoniname
还是name
取决于您想要找到什么。我曾遇到过大小写很重要的情况。 - bballdave025