通过嵌套的Shell脚本传递变量

通过嵌套的Shell脚本传递变量,shell,Shell,我的Shell脚本中有一个简单的循环,我希望能够为目录中的每个文件运行另一个循环…现在我只是要求它回显每个文件,但我确实希望对每个文件做更多的操作,但我希望首先解决这个问题 for dir in "$@/"* do folder=$(basename "$dir") path="/Users/wme/Desktop/test3/" if [ ! -d "$path$folder" ]; then mkdir "$path$folder" mkdir "$path$folder/mp4" mkdi

我的Shell脚本中有一个简单的循环,我希望能够为目录中的每个文件运行另一个循环…现在我只是要求它回显每个文件,但我确实希望对每个文件做更多的操作,但我希望首先解决这个问题

for dir in "$@/"*
do
folder=$(basename "$dir")
path="/Users/wme/Desktop/test3/"
if [ ! -d "$path$folder" ]; then
mkdir "$path$folder"
mkdir "$path$folder/mp4"
mkdir "$path$folder/mov"
mkdir "$path$folder/ogg"
mkdir "$path$folder/webm"
mkdir "$path$folder/img"
fi
for file in "$dir/"*
    echo $file
done
done
因此,本质上是查找所有目录,为这些文件夹创建一个文件夹结构,现在我需要去处理每个文件夹中的电影…但是当我尝试执行第二个嵌套循环时,出现了一个错误,我做错了什么


还应该注意的是,我在Automator中运行这个程序,所以它不会真正给我一个错误,只是说操作失败了。

您的第一个for循环也会有问题<代码>“$@/”*将扩展到
$1$2$n/*
,而不是
$1/*$2/*$n/*
。你需要

path="/Users/wme/Desktop/test3"
for dir in "$@"; do
    for subdir in "$dir/"*; do
        folder=$(basename "$subdir")

        if [ ! -d "$path/$folder" ]; then
            for ftype in mp4 mov ogg webm img; do
                mkdir -p "$path/$folder/$ftype"
            done
        fi
        for file in "$subdir/"*
           echo $file
        done
done

你在第二个循环中忘记了做什么。天哪,我花了20分钟来确保我没有问一个愚蠢的问题……谢谢!始终最好在Automator之外测试脚本,在调试脚本或跟踪错误时始终还原到shell。