我使用 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.zip
或file2.zip
等)。因此,这个故事的寓意是,在使用 find 时,请确保使用引号将带有通配符的任何文件名引起来。