我只需要在所有嵌套目录(包括 PWD)下匹配具有一个特定扩展名的文件,并使用“通配”的 BASH。
设置 -o globstar; ls **/*.*
适用于所有文件(不是我的问题)。
ls **/*.php
在 PWD 中不匹配。set -o globstar;**/*.php
返回重复文件。从这个答案(这里),我相信可能没有一种方法可以使用球状。
我需要:
ls
、sed
,cp
;cat
和chown
等)我正在使用< code>grep
grep-r--包括=GLOB
不是cp
的全局表达式;它是grep
特有的解决方法,不是解决方案。查找
不是一个全局,但如果没有这样的全局表达式,它可能是非grep
命令的解决方法。它需要|
或同时做;
等等。假设我有这些文件,都包含“找到我”:
./file1.js
./file2.php
./inc/file3.js
./inc/file4.php
./inc.php/file5.js
./inc.php/file6.php
我只需要匹配/所有. php一次:
./file2.php
./inc/file4.php
./inc.php/file6.php
这改变了问题;它不能解决它。
在进入 shopt -s globstar
作为单个命令之前......
ls**/*. php
返回:
inc/file4.php
inc.php/file5.js
inc.php/file6.php
在输入shopt-s globstar
作为单个命令后。。。
ls**/*. php
返回:
file2.php
inc/file4.php
inc.php/file6.php
inc.php:
file5.js
file6.php
在进入 shopt -s globstar
作为单个命令之前......
grep -R “Find Me” **/*.php
返回:
inc/file4.php: find me
inc.php/file6.php: find me
在输入shopt-s globstar
作为单个命令后。。。
grep -R “Find Me” **/*.php
返回:
file2.php: find me
inc/file4.php: find me
inc.php/file5.js: find me
inc.php/file6.php: find me
inc.php/file6.php: find me
grep -r "find me" *.php && grep -r "find me" */*.php
ls -l *.php && ls -l */*.php
我在这里失败了
grep -r "find me" [GLOB]
ls -l [GLOB]
grep
确实有--包括
标志,它实现了相同的结果,但使用了特定于grep
的标志。ls
没有--包括
选项。这让我相信没有这样的全局表达式,这就是grep
有这个标志的原因。
提出不同的策略:
使用显式查找
命令使用-printf
选项在选定的文件上构建bash
命令。
检查命令的正确性并运行。
find . -type f -name "*.php" -printf "cp %p ~/destination/ \n"
cp ./file2.php ~/destination/
cp ./inc/file4.php ~/destination/
cp ./inc.php/file5.php ~/destination/
bash <<< $(find . -type f -name "*.php" -printf "cp %f ~/destination/ \n")
使用 shell 通配,只能通过在 glob 末尾添加 /
来获取目录,但无法专门获取文件(zsh
是一个例外)
对于给定的树:
file.php
inc.php/include.php
lib/lib.php
假设shell支持非标准**
glob:
> < li>
**/*。php/
扩展为< code>inc.php/
<代码> **/*。php扩展为< code > file . PHP inc.php inc.php/include.php lib/lib . PHP
要获取< code > file . PHP inc.php/include.php库/库. php,不能使用glob。< br> =
递归获取与给定标准 glob 匹配的文件,然后对它们应用命令的 POSIX 方法是使用 find -type f -name ... -exec ...
:
ls -l
find . -type f -name '*.php' -exec ls -l {} +
< li>grep“找到我”
find . -type f -name '*.php' -exec grep "finde me" {} +
正轨
find . -type f -name '*.php' -type f -exec sh -c 'cp "$@" ~/destination/' _ {} +
<sup>备注:这一点有点棘手,因为您需要<code>~/testination/
使用bash,您可以首先执行<code>shopt-s globstar</code>以启用递归匹配,然后执行<code<**/*模式。php将扩展到当前目录树中具有.php扩展名的所有文件。
ZSH 和 KSH93 也支持此语法。其他将 glob 模式作为参数并对其进行自己扩展的命令(如您的 grep --include
)可能不会。
我编写了一个脚本,可以递归地从一个目录复制到另一个目录,跳过文件名中具有特定模式的文件: 在大多数情况下,它工作得很好。但我的问题是,它在每个文件夹中创建了一个子文件夹,其中包含文件。例如: 如果输入源作为具有此结构的目录: 我希望在目标文件夹中创建以下结构: 但相反,我得到了: 知道我哪里错了吗?
通配符 # glob_asterisk.py import glob for name in sorted(glob.glob('dir/*')): print(name) # glob_subdir.py import glob print('Named explicitly:') for name in sorted(glob.glob('dir/subdir/*')):
本文向大家介绍OCaml 具有模式匹配的递归列表处理,包括了OCaml 具有模式匹配的递归列表处理的使用技巧和注意事项,需要的朋友参考一下 示例 在这里,我们演示了如何使用OCaml的模式匹配语法来递归处理列表。 在这种情况下,模式[]匹配空列表,而hd::tl匹配任何具有至少一个元素的列表,hd并将列表的第一个元素分配给,列表的其余部分(可以为空)分配给tl。 请注意,这hd::tl是一种非常通
问题内容: 我想在2个不同的基本文件中提供相同的内容。 所以我正在尝试这样做: page1.html: page2.html: 问题是我似乎无法同时使用扩展和包含。有什么办法吗?如果没有,我该如何完成以上工作? commondata.html覆盖base1.html和base2.html中指定的块 这样做的目的是提供pdf和html格式的同一页面,但格式略有不同。上面的问题虽然简化了我要尝试做的事
我在angular 5中实现了一个模式,在.ts文件中使用以下代码进行密码验证。这样做的目的是支持至少八个字符,至少一个大写字母、一个小写字母、一位数字和一个特殊字符。请参阅:密码的Regex必须包含至少八个字符、至少一个数字以及大小写字母和特殊字符 我明白了,当我在密码文本框中输入一个字符串时,例如< code>Niladri1!然而,当我输入一个类似于< code>Nopasss123!!,它
模式,是Rust另一个强大的特性。它可以被用在let和match表达式里面。相信大家应该还记得我们在复合类型中提到的关于在let表达式中解构元组的例子,实际上这就是一个模式。 let tup = (0u8, 1u8); let (x, y) = tup; 而且我们需要知道的是,如果一个模式中出现了和当前作用域中已存在的同名的绑定,那么它会覆盖掉外部的绑定。比如: let x = 1; let c