AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1169615
Accepted
DK Bose
DK Bose
Asked: 2019-08-31 08:07:32 +0800 CST2019-08-31 08:07:32 +0800 CST 2019-08-31 08:07:32 +0800 CST

“-ls”与“find”一起使用时有什么作用?

  • 772

根据man find:

-ls

真的; 在标准输出上以ls -dils格式列出当前文件。块计数为 1K 块,除非设置了环境变量 POSIXLY_CORRECT,在这种情况下使用 512 字节块。有关如何处理文件名中的异常字符的信息,请参阅UNUSUAL FILENAMES部分。

我不明白这ls -dils部分。

man ls有“-d 列出目录本身,而不是它们的内容”。

考虑一个包含三个 .png 文件的文件夹:

$ ls
01-default.png  02-jungle.png  03-snow.png
$ 

我明白了

$ find . -type f -ls
 12983011     28 -rw-rw-r--   1 dkb    dkb       25964 Mar 10 17:28 ./01-default.png
 12982994     24 -rw-rw-r--   1 dkb    dkb       21857 Mar 10 17:28 ./03-snow.png
 12983031     28 -rw-rw-r--   1 dkb    dkb       25964 Mar 10 17:28 ./02-jungle.png
$

但是,如果-ls手段与 相同ls -dils,我应该会看到类似的东西,ls -dils但我得到的只是

$ ls -dils
13631944 4 drwxrwxr-x 2 dkb dkb 4096 Aug 30 21:22 .
$ 

然而,ls -ils更像是我find使用的-ls:

$ ls -ils
total 80
12983011 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 01-default.png
12983031 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 02-jungle.png
12982994 24 -rw-rw-r-- 1 dkb dkb 21857 Mar 10 17:28 03-snow.png
$ 

所以我想知道man find页面中是否有错字,是否ls -dils真的应该出现ls ils在我在问题顶部引用的部分。

command-line find manpage
  • 1 1 个回答
  • 15899 Views

1 个回答

  • Voted
  1. Best Answer
    Eliah Kagan
    2019-08-31T08:46:07+08:002019-08-31T08:46:07+08:00

    对于它找到的每个文件,当您替换为该文件的路径时,带有find该操作的命令会以类似于该命令显示的格式显示-ls该文件:path

    ls -dils path

    这就是说findwith-ls类似于运行许多以开头的 ls -dils命令,每个找到一个文件。它与不带路径参数运行此实际命令不同:

    ls -dils
    

    该ls命令在没有路径参数的情况下运行时表现出特殊行为:它的行为就像.传递了单个路径参数一样。您一直在将find命令-ls的行为与ls不带路径参数的命令的行为进行比较,但您应该将其行为与ls 带路径参数的行为进行比较。例如,试试这个:

    ls -dils ./*
    

    (因为ls它的输出排序,如下所述,更好的比较是与许多单独的命令,每个命令一个。)ls -dils ./filenamefilename

    对于那些特定的文件,无论有没有-d. 但是,find可以找到目录。您可以通过创建一个目录并同时尝试和来查看ls带有和不带有该选项的命令之间的区别。例如:-dls -dils ./*ls -dils ./*

    ek@Cord:~/tmp$ touch a b c
    ek@Cord:~/tmp$ mkdir d
    
    ek@Cord:~/tmp$ ls -dils ./*
    147774362773104141 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 ./a
     71213169107810485 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 ./b
     23080948090377031 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 ./c
     25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 ./d
    
    ek@Cord:~/tmp$ ls -ils ./*
    147774362773104141 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 ./a
     71213169107810485 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 ./b
     23080948090377031 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 ./c
    
    ./d:
    total 0
    

    重申一个特别重要的点:因为findwith-ls类似于运行许多单独的命令ls -dils path,它的行为与任何特定ls命令不同。(它的行为确实有点类似于 a ,找到的所有路径都在哪里,但也不完全相似,因为该命令对其输出进行排序,因此结果通常会以不同的顺序出现。)ls -dils paths...paths...findls


    另一种查看方式是运行一个find命令,其结果包括带有-ls操作的目录,然后运行find使用该操作的相应命令来运行具有不同选项的-exec实际命令。ls例如:

    ek@Cord:~/tmp$ find . -ls
    54043195528455285      0 drwxrwxrwx   1 ek       ek            512 Aug 30 12:35 .
    147774362773104141      0 -rw-rw-rw-   1 ek       ek              0 Aug 30 12:35 ./a
     71213169107810485      0 -rw-rw-rw-   1 ek       ek              0 Aug 30 12:35 ./b
     23080948090377031      0 -rw-rw-rw-   1 ek       ek              0 Aug 30 12:35 ./c
     25051272927352243      0 drwxrwxrwx   1 ek       ek            512 Aug 30 12:35 ./d
    
    ek@Cord:~/tmp$ find . -exec ls -dils {} \;
    54043195528455285 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 .
    147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
    71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
    23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
    25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 ./d
    
    ek@Cord:~/tmp$ find . -exec ls -ils {} \;
    total 0
    147774362773104141 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 a
     71213169107810485 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 b
     23080948090377031 0 -rw-rw-rw- 1 ek ek   0 Aug 30 12:35 c
     25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 d
    147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
    71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
    23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
    total 0
    

    在-ls不带 -运行的版本中,为、、和d显示的第一个条目是第一个命令运行的输出,带有路径。要验证这一点,请尝试使用代替(交互操作,在每个命令之前提示您,从而明确哪些命令产生哪些输出)。abcd ls.-ok-exec

    • 4

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve