将特定目录中包含的文件移动到前一个目录(centOS)

将特定目录中包含的文件移动到前一个目录(centOS)

我会尽力解释我的问题(抱歉我的英语不好)。

我有一个具有如下目录结构的图片库:

images/dir1/subdir1/IMG/files.jpg
images/dir1/subdir2/IMG/files.jpg
images/dir1/subdir3/IMG/files.jpg
images/dir2/subdir1/IMG/files.jpg
.......
images/dir109/subdir1/IMG/files.jpg

名为 images 的目录包含 109 个目录 (dir1,dir2, ... dir109),这 109 个目录里面总共有 1200 个子目录,每个子目录都包含一个名为 IMG 的目录,其中包含图像 (file1.jpg file2.jpg 等...),我想将每个名为 IMG 的目录中包含的所有图像移动到前一个目录 (子目录) 中,以实现如下效果:

images/dir1/subdir1/file1.jpg
images/dir1/subdir1/file2.jpg
images/dir1/subdir2/file1.jpg
........
images/dir109/subdir1/file.jpg

答案1

我正在使用 Ubuntu,但只要你使用 bash,它就应该可以工作。

#!/bin/bash

for file in $(find ./images/ -name "file*.jpg"); do
    mv $file "$(dirname $file)/../"
done

请注意,为了简单起见,此代码不处理路径中的空格,因此在其他情况下可能不起作用。

编辑: 这里可能有一个更好的代码。要运行它,您必须指定“图像”文件夹的绝对路径或相对路径。

#!/bin/bash

find "$1" -print | grep "IMG/file.*\.jpg" | while read file; do
    parent_dir="`dirname \"$file\"`/../"
    mv "$file" "$parent_dir"
done

find "$1" -name 'IMG' | while read IMG; do
    if [ -z "`ls -A \"$IMG\"`" ]; then
        rm -r "$IMG"
    fi
done

它会处理路径中的空格并删除剩余的、本应为空的 IMG 目录。只有当 IMG 目录确实为空时,它才会删除它。多次运行此脚本也应该很安全。

如果您对这一切还很陌生 - 以下是使用此代码的方法:

  1. 将其复制并粘贴到新文件,例如 moveJPGsToParent.sh。
  2. 使其可执行:chmod u+x moveJPGsToParent.sh
  3. 运行:./moveJPGsToParent.sh "path to images folder"

编辑2: 应该承认@Zoredache 的解决方案更加优雅:

rename 's/IMG\/file/file/' images/dir*/subdir*/IMG/file*.jpg

相关内容