我在使用脚本时遇到了问题mv
。
我创建一个
Test
文件夹:mkdir Test
在此文件夹中我创建了子文件夹:
mkdir -p Pics20{18..23}/{01..12}
在
Test
文件夹中我创建了许多文件:touch IMG20{18..23}{01..12}{01..30}{01..10}.jpg
现在我需要将所有这些 IMG 文件移动到相应的子文件夹中,所以我编写了一个脚本:
for i in 20{18..23} do for j in {01..12} do mv IMG20$i$J* Pics20$i/$j done done
但我一直收到错误:
cannot stat 'IMG202018j*': No such file or directory
我的脚本有什么问题?
答案1
我必须创建一个包含“您的内容”的测试目录。这样我就写了一个有效的单行代码,
for i in 20{18..23}; do for j in {01..12}; do mv "IMG$i$j"* "Pics$i/$j"; done; done
您必须将 J 替换为 j,并添加分号来分隔语句。使文件名和目录名匹配也很重要(观看如何添加“20”)
用双引号括住带有变量的表达式也是很好的做法。
答案2
如果您的文件结构组织良好,那么简单rename
就足够了。如果对象数量可能超过 ARG_MAX,stdin
则最好从中读取。
printf %s\\0 IMG*.jpg | \
rename -0 -d 's|IMG(....)(..)(.*)|Pics$1/$2/$3|'