Linux:为什么 ls -R *.zip 无法在树中找到 zip 文件?

Linux:为什么 ls -R *.zip 无法在树中找到 zip 文件?

我使用 DOS 已有 22 年,但对 Linux 还是个新手。因此在 Linux 中,当我执行

ls -R *.zip

为什么我会收到:

ls:*.zip:没有此文件或目录

当我位于一个巨大的文件夹和文件树的顶部时?或者,我该怎么做

Dir /s *.zip

在 Linux 中?

答案1

尝试ls -R|grep .zip或获取完整路径:

find .  -name '*.zip'

.zip这将找到当前目录和任何子目录中以 结尾的任何文件。

它看起来有点长但是比 Windows 的方式强大得多dir /s *.zip

答案2

进一步扩展上述答案,在 Linux 上,通配符由 shell 扩展,这意味着 shell 将使用匹配文件名列表作为参数来调用该命令。并且 shell 仅在当前目录中查找匹配的文件(或在通配符之前指定的任何目录中)。例如,以下命令:

ls *.zip

实际上会翻译成:

ls file1.zip file2.zip file3.zip

.zip而且,如果当前目录中没有文件,则文字文件*.zip名将传递给命令,在这种情况下,它不会找到名为 的文件*.zip。(*顺便说一下, A 是 Unix/Linux 文件名中的合法字符)。现在,如果您不想让 shell 扩展通配符,而是希望将通配符直接传递给您正在调用的命令,则必须将其括在引号中。这有一个有趣的效果,因为命令如下:

find . -name *.zip

如果当前目录中没有.zip文件(find 命令会发现*.zip),则会产生预期结果。但如果当前目录中有一个或多个 .zip文件,则执行的操作是:

find . -name file1.zip file2.zip

它将无法在任何子目录中找到任何匹配项(除非它们恰好被命名为file1.zipfile2.zip等)。因此,这个故事的寓意是,在使用 find 时,请确保使用引号将带有通配符的任何文件名引起来。

相关内容