如果我发出此find命令,它只显示指定目录中的内容:
find /Users/me/Pictures -name *.jpg
但如果我发出这个,它会遍历子文件夹并显示所有.NEF文件:
find /Users/me/Pictures -name *.NEF
子文件夹中有很多.jpg文件。发生了什么事?
感谢。
更新: 我删除了那个单独的.jpg文件然后命令工作并找到了其余的。真的吗?刚刚发生了什么?
答案 0 :(得分:1)
真的?刚刚发生了什么?
您刚刚了解了shell通配符扩展。
在命令行中输入未加引号的通配符(*
)时,在命令行执行之前由shell 扩展。因此,如果您的本地目录中有一个名为foo.jpg
和bar.jpg
的文件,那么:
echo *.jpg
扩展为:
echo foo.jpg bar.jpg
你会看到输出:
foo.jpg bar.jpg
但是如果你有没有匹配的文件,那么命令行会逐字运行,你会看到输出:
*.jpg
这正是您的find
命令发生的事情。在当前目录中使用单个.jpg
,*.jpg
会扩展为文件名。删除文件后,*.jpg
表达式被保留并传递给find
命令。
如注释中所示,解决方案是引用您的参数来查找find
命令以禁止shell通配符扩展。即使目录中包含foo.jpg
和bar.jpg
文件,如果您运行:
echo "*.jpg"
您将看到输出:
*.jpg
答案 1 :(得分:1)
使用find /Users/me/Pictures -name *.jpg
的情况是shell(Bash)在执行命令之前扩展*.jpg
。所以,如果您有这样的文件夹:
$ ls
1.jpg 2.jpg 3.jpg dir1 dir2 dir3
shell通过应用正则表达式扩展*.jpg
。因此,将在find /Users/me/Pictures -name 1.jpg 2.jpg 3.jpg
之后发出的提示命令。 (这个命令在Linux上实际上对我失败了,所以macOS似乎行为不同)。
如果用引号括起*.jpg
,就像Daniel建议的那样,表达式不会被扩展/“全局化”。
答案 2 :(得分:0)
尝试在表达式中使用双引号,让我们知道它是怎么回事。
find /Users/me/Pictures -name "*.NEF"
OR
find /Users/me/Pictures -name "*.jpg"
答案 3 :(得分:0)
只需检查扩展程序是.jpg还是.JPG!很多时候我们忽略了扩展中的资本案例。
最好的办法是尝试忽略大小写并将 <!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge,chrome = 1">
<title>Hello World using select2.js</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
</head>
<body>
<select multiple id="e1" class="js-example-basic-multiple js-states form-control">
<option value="AL">Alabama</option>
<option value="Am">Amalapuram</option>
<option value="An">Anakapalli</option>
<option value="Ak">Akkayapalem</option>
<option value="WY">Wyoming</option>
</select>
</body>
<script>
$(document).ready(function () {
$(".js-example-basic-multiple").select2();
});
</script>
</html>
放在双引号
*.jpg