如何在Unix脚本中使用'ls'命令查看另一个目录?

10

我的代码

echo $ls | /var/lib/judgem/records/

我正在尝试让脚本显示文件夹“records”中的所有文件。

我应该怎么做?


你的意思是递归吗? - Julián Chamalé
我会使用类似 find "$DIRECTORY" -type f -maxdepth 1 的命令,其中 $DIRECTORY 是你要操作的目录。如果希望搜索子目录中的文件,就删去 -maxdepth 1。如果希望搜索文件和子目录,就删去 -type f - mpontillo
5个回答

18

将目录作为参数传递给ls命令:

ls /var/lib/judgem/records

不起作用。输出只是 ls /var/lib/mailman/lists/ 。与上面的人一样。 - Dan
上面是什么人?我不明白它怎么能够输出一个完全不同目录下的文件名。 - Barmar
@Barmar,您能告诉我如何在指定位置运行此命令“ls -d -1 $PWD/*.*”吗? - Kasun Siyambalapitiya
我不明白这个问题。为什么它不起作用?你所说的“在给定位置”是什么意思?$PWD指定了当前目录。如果你想要其他目录,就把它放在$PWD的位置。 - Barmar

10

或者,如果你想列出另一个目录的内容而不显示完整路径,也就是好像你在那个目录里一样,但是在命令完成后不会跳转到该目录,可以使用子 shell:

(cd /var/lib/judgem/records/ && ls)
您会注意到您仍然停留在原来的目录,但文件列表中没有以 /var/lib/judgem/records 开头的完整路径。

您会注意到您仍然停留在原来的目录,但文件列表中没有以 /var/lib/judgem/records 开头的完整路径。


4
不需要使用cd命令。当你在ls命令后面跟上一个目录名参数时,它会列出该目录的内容。只有在使用ls /var/lib/judgem/records/*命令时才会显示完整路径。请注意,不要改变原文的意思。 - Barmar
一旦挂载,这也可以很好地从USB存储设备中获取所有文件夹 (cd /mnt/usbstick && ls -d */) - TommySmoke

1
要在另一个目录中列出文件,您需要相应地指定绝对/相对路径。
pwd => /usr/local ls /home/fe567/data
或者
pwd => /home/fe567 ls ./data

-1

find /var/lib/judgem/records/ -type f -maxdepth 1

查找 /var/lib/judgem/records/ 目录下的文件,最大深度为1。


除非您添加 -maxdepth 1,否则您的命令将列出 /var/lib/judgem/records/ 的整个 子树 中的所有文件,而不仅仅是直接位于 /var/lib/judgem/records/ 中的文件。 - mklement0

-2

要列出另一个目录,请在命令后面提供该目录。 应该看起来像这样:

ls /var/lib/judgem/records

这是 Bash。


1
你从什么时候开始在Bash中使用\作为目录分隔符的?! - Keith Pinson
你的意思是 ls /var/lib/judgem/records - Keith Thompson
你是正确的,Keith。使用 / 斜杠,我在等午餐的时候用手机发送了信息,哈哈,没有注意到。 - Kwehmann
这个命令与bash无关:ls是一个可执行文件(而不是shell内置命令),/var/lib/judgem/records是一个字符串字面量(尽管它没有引号,但鉴于其值,我所知道的任何shell都不会对其进行扩展)。 - mklement0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接