如何获取从“ls -l /a/*/b”到变量的扩展路径

如何获取从“ls -l /a/*/b”到变量的扩展路径

我创建了一个如下所示的文件夹结构

mkdir -p test/f{1..4}/inside

跑步时ls -l test/*/我得到了


test/f1/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f2/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f3/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f4/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

如何获取test/f1/:变量中的扩展路径(如),以便在循环中使用它来执行进一步的逻辑。

答案1

您不想循环遍历包含“多个项目”的变量(变量只能包含单个项目)。尤其是当您使用 bash 或其他支持数组的 shell 时。

您可以使用这些目录设置一个数组,如下所示:

array=( test/*/ )

然后循环遍历它们:

$ for item in "${array[@]}"; do printf '\n%s\n' "Current directory: $item"; ls -l "$item"; done

Current directory: test/f1/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f2/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f3/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f4/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

不过,您也可以直接循环它们,如下所示:

for item in test/*/; do
    #something with "$item"
done

注意:我总是建议使用事物的完整路径而不是相对路径

for item in /path/to/test/*/; do
    #something with "$item"
done

当你进行通配时这尤其安全

相关内容