**已关闭。**此问题为not about programming or software development。目前不接受回答。
此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题相关,可以发表评论,说明在何处可以回答此问题。
3天前关闭。
Improve this question的
我有一个名为test
的目录,该目录在日期范围内有子文件夹,如01
,02
,... 31
。所有子文件夹都包含.bz2文件。我需要使用查找命令搜索所有具有.bz2扩展名的文件,但不包括特定范围的目录。我知道find . -name ".bz2" -not -path "./01/*"
,但是如果我想跳过10个目录的话,写-not -path "./01/*"
就太可悲了。那么我怎么在我的find
命令中跳过01..19
子目录呢?
4条答案
按热度按时间eagi6jfj1#
您可以在模式中为选项
-not -path
使用通配符:字符串
这将排除所有以0或1开头的目录。或者更好:
型
ma8fv8wu2#
首先,您可以通过使用
-prune
而不是-not -path
来帮助find
-这甚至可以避免查看相关目录。对于你的主要观点-你可以为你的例子构建一个数据库(数字01到19):
字符串
如果你也愿意忽略“00”(也许你知道它不存在),那么你可以将合并合并为一个字符串:
型
如果您的范围不太方便(例如05到25),您可能希望将范围构建到bash变量中,然后将其插入
find
命令:型
(you可能需要
echo "${a[*]}"
或printf '%s\n' ${a[*]}
来查看它是如何工作的)r6l8ljro3#
对我来说,我发现find命令作为一个独立的工具有点麻烦。因此,我总是最终使用find的组合来进行递归文件搜索和grep来进行实际的排除/包含。最后我将结果交给第三个命令来执行操作,例如rm来删除文件。
我的通用命令看起来像这样:
字符串
例如,您希望删除当前目录中所有不匹配某些条件的文件:
型
正如你所看到的,我们在当前目录中搜索,由点表示为root-path:然后我们想要反转匹配结果,因为我们希望所有文件不匹配我们的条件:最后我们将找到的所有文件传递给rm以便删除它们:我在recursive/force delete all files中添加了-rf。我使用find命令和 -not -name“." 来排除当前目录,通常用点表示。
对于实际问题:假设我们有一个使用.git和.metadata目录的目录,我们想在搜索中排除它们:
型
希望有帮助!
jgovgodb4#
如果你想排除父目录下的子目录,这可能是有用的:
例如:你有一个父目录“ParentDir”,它有两个子目录“Child1,Child2”。你只想从“Chiled2”读取文件,跳过“Child1”。这样会有帮助。
字符串