我会尽力解释我的问题(抱歉我的英文不好)。
我有一个像这样的目录结构的图像库:
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
(dir1,dir2,… dir109),109个目录里面共有1200个子目录,每个子目录都包含一个名为IMG的目录,里面有图像(file1.jpg file2.jpg等等) ,我想将包含在名为IMG的每个目录中的所有图像移动到之前的目录(subdir)中,使其具有类似的内容:
images/dir1/subdir1/file1.jpg images/dir1/subdir1/file2.jpg images/dir1/subdir2/file1.jpg ........ images/dir109/subdir1/file.jpg
我使用的是Ubuntu,但是只要你使用bash就可以工作。
#!/bin/bash for file in $(find ./images/ -name "file*.jpg"); do mv $file "$(dirname $file)/../" done
请注意,为了简单起见,此代码不处理path中的空格,因此在其他情况下可能无法使用。
编辑:这可能是一个更好的代码。 要运行它,你必须指定'images'文件夹的绝对path或相对path。
#!/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
它照顾path中的空间,并删除剩余的,应该是空的IMG目录。 它只有在确实为空的情况下才会删除IMG目录。 它也应该保存多次运行这个脚本。
如果你对这一切都很陌生 – 下面是你如何使用这个代码:
chmod u+x moveJPGsToParent.sh
./moveJPGsToParent.sh "path to images folder"
编辑2:应该承认@ Zoredache的解决scheme变得更加优雅:
rename 's/IMG\/file/file/' images/dir*/subdir*/IMG/file*.jpg