该表达式.*
由 bash 扩展以包括当前和父目录:
$ ls -la
total 2600
drwxrwxrwx 2 terdon terdon 2162688 Sep 10 16:22 .
drwxr-xr-x 142 terdon terdon 491520 Sep 10 15:34 ..
-rw-r--r-- 1 terdon terdon 0 Sep 10 16:22 foo
$ echo .*
. ..
Run Code Online (Sandbox Code Playgroud)
如果我rm -rf .*
使用 GNU bash 在我的 Debian 上运行,version 4.2.36(1)-release
并且rm
从rm (GNU coreutils) 8.13
,我会收到以下消息:
$ rm -rf .*
rm: cannot remove directory: `.'
rm: cannot remove directory: `..'
Run Code Online (Sandbox Code Playgroud)
这是 GNU 的东西还是 POSIX?是否有任何 …
如果我跑 ls -a
user@users-MacBook-Pro:~$ ls -a
. ..
Run Code Online (Sandbox Code Playgroud)
我得到.
和..
(当前目录和父目录?)
他们出现之后有什么原因吗ls -a
,他们做了什么有趣的事情吗?
我在/mnt上安装了几个子文件夹。一个是/mnt/data,另一个是/mnt/1804iso。该/数据包括数据文件夹和文件从安装另一个磁盘,和/ 1804iso包括安装其内容我想复制到文件夹ISO文件/媒体/尼/ 0EB4-95E2 /这是一个安装闪存驱动器。
所以我打开bash并输入sudo cp -Rn /mnt/1804iso/.* /media/benny/0EB4-95E2/
. 我通常会省略通配符星号/*/之前的句点,但如果我这样做,则 ISO 中的隐藏文件不会复制。所以有了这个命令,一件奇怪的事情发生了。正确复制 ISO 文件后,它也开始复制/mnt/data文件夹和文件。我不明白为什么会发生这种情况,因为没有引用该文件夹,除非我对命令部分的理解/mnt/1804iso/.*
完全有缺陷。
有人可以解释为什么我的/mnt/data
文件夹被包含在复制中吗?
让我举个例子吧:
$ echo Hello > file1
$ echo Hello > file2
$ echo Hello > .file3
$ grep Hello * 2>/dev/null
file1:Hello
file2:Hello
Run Code Online (Sandbox Code Playgroud)
在这里您可以看到忽略的 grep.file3
从.
预期结果:
$ grep Hello * 2>/dev/null
.file3:Hello
file1:Hello
file2:Hello
Run Code Online (Sandbox Code Playgroud)
在 的情况下ls
,有一个参数-a
告诉不要忽略以开头的条目,.
但我找不到任何功能grep
那么,无论如何要告诉grep
不要忽略以 开头的条目.
?或者为什么grep
忽略它们?