删除目录中不属于目录副本的所有文件

删除目录中不属于目录副本的所有文件

我有以下文件夹结构

foo/images
foo/infos

infos 包含描述 foo/images 文件夹中图像的 xml 文件集合。命名约定如下:图像为 image1.png,描述符为 image1.xml。我试图解决的问题如下:删除所有没有关联描述符的图像。

我为此使用 emacs dired 已经有一段时间了,并取得了巨大的成功。但是,现在我需要在没有安装 emacs 的系统上执行此操作,bash 是唯一的选择。

答案1

#!/bin/bash

infosdir="foo/infos"
imagesdir="foo/images"

# use a different IFS to allow spaces in filenames
IFS=$(echo -en "\n\b")

# for all images in the images-directory
for pngfullname in ${imagesdir}/*.png; do
 # get the name of the image without the path and without the file-extension
 basename="$(basename ${pngfullname} .png)"
 # if an appropriate xml-file in the infos-directory is missing
 if [ ! -f "${infosdir}/${basename}.xml" ] ; then
   # delete the image
   rm "${pngfullname}"
 fi
done

答案2

我建议创建一个新目录

mkdir images_clean

然后将带有现有信息的图像移动到此目录。

cd foo/infos
for f in *; do name="${f%.xml}"; mv ../foo/images/"$name".png ../foo/images_clean; done

并稍后删除剩余的

rm -rf foo/images

相关内容