删除一个文件夹中另一个文件夹中的图像

时间:2019-06-06 10:01:21

标签: bash ubuntu-16.04

我有两个包含图像的文件夹。 (说文件夹{​​{1}}和1

文件夹2中的图像是文件夹2中图像的子集。我想从文件夹1中的文件夹1中删除图像。我该怎么办?

编辑

两个文件夹中的文件名完全相同

OS-Ubuntu 16.04 LTS

请要求提供任何进一步的信息。

3 个答案:

答案 0 :(得分:2)

以下是可能的方法之一:

  1. 列出并排序文件夹中的所有文件名(查找)
  2. 比较列表以查找相交(join
  3. 从folder1(rm)中删除路口文件

1。

find /path/to/folder1 -type f  -printf '%f\n'|sort
find /path/to/folder2 -type f  -printf '%f\n'|sort

2。

join  <(find /path/to/folder1 -type f  -printf '%f\n'|sort ) <(find /path/to/folder2 -type f  -printf '%f\n'|sort))

3。放入1.和2. altogheter:

for f in $(join  <(find /path/to/folder1 -type f  -printf '%f\n'|sort ) <(find /path/to/folder2 -type f  -printf '%f\n'|sort))
do 
 echo removing $f
 # uncomment below once you are satisfied with the list printed
 # rm "/path/to/folder1/$f"
done

答案 1 :(得分:2)

选项1:文件是具有相同文件名的纯副本

for file1 in dir1/*; do
    [[ -e "dir2/$(basename "$file1")" ]] && echo "$file1"
done

选项2:文件是具有相同文件名的纯副本,但是在复制后可能会进行修改。

以下也检查内容

for file1 in dir1/*; do
    file2="dir2/$(basename "$file1")"
    [[ -e "$file2" ]] && cmp --silent "$file1" "$file2" && echo "$file1"
done

选项3:文件是副本,但文件名可能已更改。

看看fdupes还是可以执行以下操作:

checksums=$(md5sum dir2/* | awk '{printf substr($1,length($1)-32+1,32) OFS}')
for file1 in dir1/*; do
    md5sum=$(md5sum "$file1"| awk '{printf substr($1,length($1)-32+1,32)}')
    [[ "$checksums" =~ $md5sum ]] && echo "$file1"
done

在最后一个示例中,我们使它有点麻烦,因为带有换行符或有趣字符的文件名会在校验和(cfr。md5sum prepends '\' to the checksum)中引入字符

注意:在检查后,将echo "$file1"替换为rm "$file1"

答案 2 :(得分:2)

使用find\0来解析带有空格或换行符的文件名。

查找文件夹1中的所有文件。将其从文件夹2中删除(忽略错误)。

dir1=1
dir2=2
find "${dir1}" -type f -printf '%f\0' | xargs -0 -i rm "${dir2}"/{} 2>/dev/null