在Linux CLI中以递归方式列出文件,其中包含相对于当前目录的路径

Dar*_*ein 215 unix linux recursion ls

这与此问题类似,但我想在unix中包含相对于当前目录的路径.如果我执行以下操作:

ls -LR | grep .txt
Run Code Online (Sandbox Code Playgroud)

它不包括完整路径.例如,我有以下目录结构:

test1/file.txt
test2/file1.txt
test2/file2.txt
Run Code Online (Sandbox Code Playgroud)

上面的代码将返回:

file.txt
file1.txt
file2.txt
Run Code Online (Sandbox Code Playgroud)

如何使用标准Unix命令将其包含在相对于当前目录的路径中?

And*_*isi 296

使用find:

find . -name \*.txt -print
Run Code Online (Sandbox Code Playgroud)

在使用GNU find的系统上,与大多数GNU/Linux发行版一样,您可以省略-print.

  • ......就此而言,你可以省略'.' (11认同)
  • 使用`-type f`只返回文件而不是目录,符号链接等. (9认同)
  • 对于绝对路径,请使用`find $(pwd)-name\*.txt` (7认同)
  • 如果pattern包含目录名的一部分,则应使用-path“ * docs / *。txt”`,而不要使用-name。-wholename与-path相同 (2认同)
  • -name“ * .txt”`不会**匹配`file.TXT` —始终使用-iname“ * .txt”`而不区分大小写。 (2认同)

小智 71

使用tree,带-f(完整路径)和-i(没有缩进线):

tree -if --noreport .
tree -if --noreport directory/
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用grep过滤掉您想要的那些.


如果找不到该命令,则可以安装它:

键入以下命令在RHEL/CentOS和Fedora linux上安装树命令:

# yum install tree -y
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Debian/Ubuntu,Mint Linux会在终端中输入以下命令:

$ sudo apt-get install tree -y
Run Code Online (Sandbox Code Playgroud)

  • 任何设置只列出文件,并排除文件夹? (2认同)

Jon*_*son 25

试试find.您可以在手册页中查找它,但它有点像这样:

find [start directory] -name [what to find]

所以对你的例子

find . -name "*.txt"

应该给你你想要的东西.


She*_*ley 9

您可以使用find代替:

find . -name '*.txt'
Run Code Online (Sandbox Code Playgroud)


ZaS*_*ter 5

要使用 find 命令获取所需文件的实际完整路径文件名,请将其与 pwd 命令一起使用:

find $(pwd) -name \*.txt -print
Run Code Online (Sandbox Code Playgroud)


小智 5

这样做的诀窍:

ls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"

但是,它通过解析"犯罪"来做到这一点ls,但是,这被GNU和Ghostscript社区认为是不好的形式.

  • @CAFEBABE:它被认为是禁忌来解析`ls'的结果,因为它通常会导致错误.有问题的句子试图说出来.它还有一个笑话,我已经删除了. (2认同)