如何在目录中创建子目录?

如何在目录中创建子目录?

我正在尝试使用 zsh shell 脚本制作一个照片管理器。但我在每个主目录中创建子目录时遇到问题(基于日期)。目前,该脚本从我创建的文件夹开始,并获取一个参数(它需要编辑的文件,因此第一张 cd $1)。其次,我做了一些与我的问题无关的名称更改。接下来,我为每个日期创建一个目录并将照片移动到正确的目录。

问题是,我想循环遍历每个日期文件夹并创建 2 个新的子目录(jpg 和 raw)。但是当我运行代码时,我收到一个错误,提示没有这样的文件或目录。

这是我当前的脚本:

#!/bin/zsh.
cd $1
for i in *.JPG;
do
        mv $i $(basename $i .JPG).jpg;
done
        
for i in *;
do
       d=$(date -r "$i" +%d-%m-%Y)
       mkdir -p "$d"
       mv -- "$i" "$d/";
done
for d in *;
do
        cd $d
        for i in *.jpg;
        do
                mkdir -p "jpg"
                mv -- "$i" "jpg";
        done

        for i in *.NEF;
        do
                mkdir -p "raw"
                mv -- "$i" "raw";
        done
done

如果有人知道我在哪里犯了错误,那将非常有帮助,因为我不知道出了什么问题,而且据我所知,nano 中没有调试器。

错误

➜  files sh test2.sh sdcard1 

test2.sh: line 16: cd: 05-03-2022: No such file or directory
mv: rename *.jpg to jpg/*.jpg: No such file or directory
mv: rename *.NEF to raw/*.NEF: No such file or directory
test2.sh: line 16: cd: 23-10-2021: No such file or directory
mv: rename *.jpg to jpg/*.jpg: No such file or directory
mv: rename *.NEF to raw/*.NEF: No such file or directory

答案1

for d in *;
do
        cd $d

据我所知这是错误。您已经在目录上创建了一个循环d。你 cd 进入$d.但你的循环永远不会退出

        done
        cd ..
done

因此,在第二次迭代中$d,您仍然位于第一个子目录中,当然,它不包含第二个$d子目录。

顺便说一下,您是按增加天数来订购的%d-%m-%Y。当然,您可以自由地这样做,但您可能会发现按年份排序可以更整齐地组织目录%Y-%m-%d

相关内容