mv 脚本的问题

mv 脚本的问题

我在使用脚本时遇到了问题mv

  1. 我创建一个Test文件夹:

    mkdir Test
    
  2. 在此文件夹中我创建了子文件夹:

    mkdir -p Pics20{18..23}/{01..12}
    
  3. Test文件夹中我创建了许多文件:

    touch IMG20{18..23}{01..12}{01..30}{01..10}.jpg
    
  4. 现在我需要将所有这些 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|'

相关内容