如何刷新BASH中的目录?


24

我有一个目录,其中包含编译器生成的文件。在每次重新构建期间,都会清理该目录,并且在构建过程后ls会给我空的输出。我cd退出目录后再回到它时,ls正确运行。问题是:

  1. 还有其他更优雅的方式来刷新目录吗?
  2. 删除并重新创建文件后,实际发生了什么?为什么需要cd查看实际目录内容?

Answers:


10

您的脚本很可能会删除目录,而不仅仅是目录中的文件。因此,当您cd进入该目录并删除该目录时,您将ls在一个实际上不存在的目录上执行操作。

通过cd ..cd (directory)您可以向上移动并返回到(新创建的)目录,并且文件位于您期望的位置。

最好的替代方法是cd将目录名添加到ls命令中,然后从父目录运行它,而不是进入目录或从目录中移出。因此,ls YourSubdirectory不仅仅是ls


45

甚至有一种更短的方法: cd .


3
有趣。像蜂鸟一样,从逻辑上讲,这应该不起作用-但看起来确实如此。我想您知道它有效,因为您已经尝试过了。您有任何文档吗?就是说,如果我在POSIX / bash开发团队中工作,我很容易将其视为一个bug。您是否知道任何说明应该以这种方式工作的文档?
G-Man说'恢复莫妮卡'

3
像猎鹰一样,它精美地漂浮在花丛之上,却吞噬了蜂鸟。
马特·福斯

是! 如此完美
chrismarx

1
这是更好的答案。
deddebme

啊。我就知道!必须有一种方法。谢谢!
andersoyvind

10

它看起来很奇怪,但很短,它会刷新目录:

cd `pwd`

请注意,这些是倒勾,而不是pwd周围的单引号


2

@Kent所说的或:不要删除目录,而只是删除目录的内容,这样,您可以保留在目录中(不带“ cd .. && cd -”)和“ ls”来完成您期望的工作。


2

如果不删除目录会更好,但是cd ..; cd -可以删除目录cd $PWD


2

创建一个别名refresh =“ cd .. && cd-”,它将进入一个目录,然后再次进入先前的目录cd

如果您确定将再次需要一个列表,则可以

alias refresh="cd .. && cd - && ls -lrt"

创建ailas之后,通过将别名存储到您的〜/ .bashrc文件中

alias | grep refresh >> ~/.bashrc

以便下次登录时可用。


在Unix中refresh是开箱即用的。
kenorb

“开箱即用”是什么意思?当我看到它时,我将其解释为“标准”。现在我想知道你的意思。定义“ UNIX”。Cygwin没有“刷新”命令标准(好的,Cygwin缺少很多POSIX / * nix /任何标准的东西),我的Linux系统也没有。
G-Man说'恢复莫妮卡'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.