我正在尝试使用以下命令更新 cwd 中所有文件夹的时间戳:
for file in `ls`; do touch $file; done
但这似乎不起作用。有什么想法吗?
答案1
到目前为止的所有答案(以及问题中的示例)都假设您想要touch
目录中的所有内容,即使您说“触摸所有文件夹”。如果发现该目录包含文件和文件夹,而您只想更新文件夹,则可以使用find
:
$ find . -maxdepth 1 -mindepth 1 -type d -exec touch {} +
或者,如果您的find
实现不支持非标准-mindepth
/-maxdepth
谓词:
$ find . ! -name . -prune -type d -exec touch {} +
这:
$ touch -c -- */
应该可以在大多数 shell 中工作,除了:
- 它还会
touch
目录的符号链接除了普通目录之外 - 它会忽略隐藏的
- 如果没有目录或目录的符号链接,它将创建一个在、、或Thompson shell
*
之外的 shell 中调用的文件(这会报告错误)。在这里,我们正在使用它来解决这个问题,尽管这仍然可能是一个名为.csh
tcsh
zsh
fish
-c
touch
*
使用zsh
,touch
仅适用于目录,包括隐藏目录:
touch -- *(D/)
答案2
答案3
另外,您应该引用您"$file"
来捕获任何空白。看http://www.grymoire.com/Unix/Quote.html
像这样的事情可能会实现你所追求的:
for file in *; do touch "$file"; done
看前两个重击陷阱以获得更彻底的解释。
答案4
find . -maxdepth 8 -mindepth 1 -type d -exec touch {} +
什么是最小深度和最大深度级别?
最大深度级别:下降到起点以下最多级别(非负整数)的目录级别。-maxdepth 0 表示仅将测试和操作应用于起点本身。
最小深度级别:不要在低于级别(非负整数)的级别应用任何测试或操作。 -mindepth 1 表示处理除起始点之外的所有文件。
一般来说,我们没有深度超过 8 的目录。因此,在上面的命令中,我将最大深度保留为 8。