ico*_*ast 6 bash wildcards dot-files
当我尝试将目录中的所有点文件与其匹配时,.*它似乎有一个令人讨厌的副作用:除了匹配所有(真实)文件和目录之外,它还匹配.和...
bash-3.2$ mv test/.* dest/
mv: rename test/. to dest/.: Invalid argument
mv: test/.. and dest/.. are identical
Run Code Online (Sandbox Code Playgroud)
这看起来真的很奇怪,因为它们基本上是“假”目录,只是为了简化相对路径。它们不是目录内容的一部分,当我尝试将一个目录的内容移动到另一个目录时,我不希望它们匹配。我想不出任何我希望它们与.*.
那么我该如何关闭它呢?(除了使用 Z shell,它并不总是可用,并且可能不是运行我编写的函数的人使用的 shell。)
您可以使用GLOBIGNOREbash 变量。
环球网
定义文件名集的以冒号分隔的模式列表
被路径名扩展忽略。如果文件名与
路径名扩展模式也匹配以下模式之一
GLOBIGNORE,它从匹配列表中删除。
和
…………………… 文件名 ``.'' 和 ``..'' 总是
设置 GLOBIGNORE 且不为空时忽略。
所以如果你设置
GLOBIGNORE='*/.:*/..'
Run Code Online (Sandbox Code Playgroud)
thenpath/.*将不匹配.and ..,如您所问。