我正在尝试使用 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
。