首页 > 解决方案 > 在 Bash For Loop 中使用 CD - 仅获取相对路径

问题描述

我有一个小脚本用于组织目录中的文件,现在我试图在一个或多个文件夹上运行它。MasterDir/dir1、MasterDir/dir2 等

运行以下代码MasterDir会导致错误,因为$dir它只是一个相对路径,但我无法弄清楚$dir 在这种情况下如何获取完整路径

for dir in */; do
    echo $dir
    cd $dir
    cwd="$PWD"
    mkdir -p "VSI"
    mv -v *.vsi "$cwd/VSI"
    mv -v _*_ "$cwd/VSI"
done

标签: bash

解决方案


我建议使用括号在子shell中运行循环体:

for dir in */; do
    (
        echo $dir
        cd $dir
        cwd="$PWD"
        mkdir -p "VSI"
        mv -v *.vsi "$cwd/VSI"
        mv -v _*_ "$cwd/VSI"
    )
done

由于它在子 shell 中运行,因此该cd命令不会影响执行脚本的父 shell。


推荐阅读