刚刚在执行find搜索命令时,报错了。。
$ find ./ -maxdepth 1 -type f -name *.trace
find: paths must precede expression: eEEProIfconfig.trace
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
网上查了下,原来是在使用正则搜索多个文件时,正则PATTERN表达式需要加上引号(单引号和双引号都可以)。
$ find ./ -maxdepth 1 -type f -name "*.trace"
./1.trace
./2.trace
./3.trace
其间网上看到这么两条指令:
$find /data/ -type f -name"*.txt" -exec cp {} /tmp \;
$find /var/www/ -name file -exec cp {}{,.bak} \; 递归备份文件
对其中cp指令后面的空白大括号
比较疑惑。带着疑问网上搜索了下,得知{}大括号里的内容为find命令找到的结果
。
@astrotycoon 的《bash之花括号展开(brace expansion)》这篇博文详细介绍了bash中花括号(大括号)的扩展。
其中下图非常有意思,展示了bash shell的扩展顺序:
回到花括号扩展的问题上来,
花括号展开的定义(brace expansion)
花括号扩展有时在别的书籍中也被称为大括号扩展,是可以让bash生成任意字符串的一种扩展功能。它与后面会提到的“路径扩展”非常相似,唯一不同的是生成的字符串可以是不存在的路径或者文件名。