gpt4 book ai didi

bash - 在 Bash 中遍历目录

转载 作者:行者123 更新时间:2023-11-29 08:46:41 25 4
gpt4 key购买 nike

我有一个关于 bash 工作原理的基本问题,以及一个相关的实际问题。

基本问题:假设我在一个包含三个子目录的目录中:a、b 和 c。

代码

for dir in $(ls)
do
echo $dir
done

吐出:

a b c
a b c
a b c

dir 总是在我的 cwd 中存储所有文件/目录的列表。我的问题是:为什么这会很方便?在我看来,让 dir 一次存储每个元素更有用和直观,即我想要输出

a
b
c

此外,根据其中一个答案 - 使用 for dir in $(ls) 是错误的,但是当我使用 for dir in $(ls -l) 我得到了更多的 a b c 副本(比 cwd 中的目录/文件多)。这是为什么?

我的第二个问题很实际:如何遍历 cwd 中以大写字母 W 开头的所有目录(不是文件!)?我从

开始
for dir in `ls -l W*`

但这失败了,因为 a) 问题 1 中的原因和 b) 因为它不排除文件。建议表示赞赏。

最佳答案

永远不要像这样解析 ls 的输出 (Why you shouldn't parse the output of ls(1))。

此外,您的语法错误。你不是指 (),你是指 $()

话虽这么说,要循环遍历以 W 开头的目录(或使用 find 命令,具体取决于您的情况):

for path in /my/path/W*; do
[ -d "${path}" ] || continue # if not a directory, skip
dirname="$(basename "${path}")"
do_stuff
done

至于你从邪恶的 ls-loop 得到的输出,它不应该看起来像那样。这是预期的输出,并演示了为什么您不想首先使用 ls:

$ find
.
./c
./a
./foo bar
./b

$ type ls
ls is hashed (/bin/ls)

$ for x in $(ls); do echo "${x}"; done
a
b
c
foo
bar

关于bash - 在 Bash 中遍历目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com