使用find搜索*.js文件时,如何排除特定目录?
find . -name '*.js'
使用find搜索*.js文件时,如何排除特定目录?
find . -name '*.js'
当前回答
path-prune方法还可以处理路径中的通配符。下面是一个find语句,它将查找服务于多个git存储库的git服务器的目录,而不包括git内部目录:
find . -type d \
-not \( -path */objects -prune \) \
-not \( -path */branches -prune \) \
-not \( -path */refs -prune \) \
-not \( -path */logs -prune \) \
-not \( -path */.git -prune \) \
-not \( -path */info -prune \) \
-not \( -path */hooks -prune \)
其他回答
要排除多个目录,请执行以下操作:
find . -name '*.js' -not \( -path "./dir1" -o -path "./dir2/*" \)
要添加目录,请添加-o-path“./dirname/*”:
find . -name '*.js' -not \( -path "./dir1" -o -path "./dir2/*" -o -path "./dir3/*"\)
但是,如果有许多目录要排除,也许您应该使用正则表达式。
如何在sh中使用find的prune选项是Laurence Gonsalves关于prune如何工作的一个很好的答案。
下面是通用解决方案:
find /path/to/search \
-type d \
\( -path /path/to/search/exclude_me \
-o \
-name exclude_me_too_anywhere \
\) \
-prune \
-o \
-type f -name '*\.js' -print
要避免多次键入/path/To/seach/,请将查找包装在pushd中。。popd对。
pushd /path/to/search; \
find . \
-type d \
\( -path ./exclude_me \
-o \
-name exclude_me_too_anywhere \
\) \
-prune \
-o \
-type f -name '*\.js' -print; \
popd
我想知道目录的数量,文件的大小(仅为当前目录的MB),而这段代码正是我想要的:-)
来源
- ... 2791037 Jun 2 2011 foo.jpg
- ... 1284734651 Mär 10 16:16 foo.tar.gz
- ... 0 Mär 10 15:28 foo.txt
d ... 4096 Mär 3 17:12 HE
d ... 4096 Mär 3 17:21 KU
d ... 4096 Mär 3 17:17 LE
d ... 0 Mär 3 17:14 NO
d ... 0 Mär 3 17:15 SE
d ... 0 Mär 3 17:13 SP
d ... 0 Mär 3 17:14 TE
d ... 0 Mär 3 19:20 UN
代码
format="%s%'12d\n"
find . -type d -not -path "./*/*" | wc -l | awk -v fmt=$format '{printf fmt, " Anzahl Ordner = ", $1-1}'
find . -type f -not -path "./*/*" | wc -l | awk -v fmt=$format '{printf fmt, " Anzahl Dateien = ", $1}'
du . -hmS --max-depth=0 | awk -v fmt=$format '{printf fmt, " Groesse (MB) = ", $1}'
注意:awk需要额外的format=“%s%12d\n”来格式化数字。
结果
Anzahl Ordner = 8
Anzahl Dateien = 3
Groesse (MB) = 1.228
我使用find为xgettext提供文件列表,并希望省略特定目录及其内容。我尝试了许多-path与-prune组合的排列,但无法完全排除我想要删除的目录。
虽然我能够忽略我想要忽略的目录内容,但find随后将目录本身作为结果之一返回,结果导致xgettext崩溃(不接受目录,只接受文件)。
我的解决方案是简单地使用grep-v跳过结果中不需要的目录:
find /project/directory -iname '*.php' -or -iname '*.phtml' | grep -iv '/some/directory' | xargs xgettext
我不能肯定,是否有一个论据支持这一发现,它能100%奏效。在头痛之后,使用grep是一个快速而简单的解决方案。
#linux中的find命令def:find命令用于在unix/linux系统中查找/搜索文件,查找搜索目录层次结构中的文件
1) exec显示与-exec、-execdir、-ok和-okdir相关的诊断信息2) -选项-H=除非在处理过程中,否则不要遵循符号链接。-L=遵循符号链接-P=从不遵循符号链接-c型文件类型为c:b块(缓冲)特殊c字符(无缓冲)特殊d目录p命名管道(FIFO)f常规文件l符号链接;如果-L选项或follow选项有效,则永远不会出现这种情况,除非符号链接断开。如果要在-L有效时搜索符号链接,请使用-xtype。s插座D门(Solaris)-删除删除文件;如果删除成功,则为true。如果删除失败,将发出错误消息。如果-删除#如果失败,find的退出状态将为非零(当它最终退出时)。find/home/mohan/a-mindepth 3-maxdepth 3-type f-name“*.txt”|xargs rm-rffind-type d-namefind-type f-名称find/path/-type f-iname(i是大小写限制)#查找目录a/b/c,只有删除其中的c目录才有“*.txt”find/home/mohan/a-mindepth 3-maxdepth 3-type f-name“*.txt”|xargs rm-rffind/home/mohan/a-mindepth 3-maxdepath 3-type f-name“*.txt”-delete#删除特定目录有空文件,只有我们才能删除空文件find/home/mohan-type f-name“*.txt”-空-删除#查找多个文件,同时查找空文件find/home/mohan-type f \(-name“*.sh”-o-name“*.txt”\)-空#删除空文件两个或多个文件find/home/mohan-type f \(-name“*.sh”-o-name“*.txt”\)-empty-delete#如何将多个文件的内容追加到一个文件中查找-键入f-name“*.txt”-exec cat{}+>>output.file#上次修改的文件查找时间少于1分钟(-n)ls-lrth|查找-f-mmin-1型#上次修改的文件超过1分钟(+n)ls-lrth|查找-f型-mmin+1#上次修改的文件正好一分钟查找-f-mmin 1型使用命令(-mtime)在一天内完全修改最后一个文件查找-类型f-mtime 10#上次修改时间超过10天查找-类型f-mtime+10#上次修改时间少于10天查找-类型f-mtime-10#如何查找从给定日期到最新日期的修改文件和文件夹查找-类型f-newermt“17-11-2020”#如何查找过去30天内访问的“sh”扩展文件列表---matdimtypels-lrt |查找-类型f-iname“.sh”-atime-30#如何查找今天创建的文件列表,-1表示少于分钟,ls-lrt |查找-类型f-ctime-1-ls