Bash脚本递归移动

时间:2017-12-30 19:40:54

标签: bash shell

我有一个像这样的目录结构:

|--Photos  
   |--2014-01-15 #2  
      |--IMG_0045.JPG  
      |--IMG_0051.JPG  
   |--2014-06-19  
      |--IMG_0078.JPG  

请注意,一个文件夹的名称包含空格[2014-01-15#2]。我编写了一个bash脚本,只使用以下方法移动所有文件夹中的* .JPG文件:

#!/bin/bash
for i in $(ls); do  
    if [ -d $i ]; then
        cd $i
        mv *.JPG /opt/data/tmp/
        cd -
    fi
done  

据我所知,由于单词拆分,脚本没有进入名称包含空格的文件夹。

是否有可以编写的bash脚本以便从所有文件夹中移动* .JPG文件?

1 个答案:

答案 0 :(得分:1)

只需mv */*.JPG /opt/data/tmp即可完成您的要求。

您的脚本有两个常见的初学者错误。您需要put double quotes around all variables which contain file names,,并且应该not be using ls to find files

就个人而言,我也建议不要在大多数脚本中使用cd

如果你需要在其他脚本中循环遍历目录,for i in ./*/; do ......就是这样做。

如果您需要递归任意深度嵌套的目录,find会这样做。使用GNU find和GNU mvfind dir -type f -name '*.JPG' -exec mv -t /opt/data/tmp {} +

相关问题