我有两个包含图像的文件夹。 (说文件夹{{1}}和1
)
文件夹2
中的图像是文件夹2
中图像的子集。我想从文件夹1
中的文件夹1
中删除图像。我该怎么办?
编辑
两个文件夹中的文件名完全相同
OS-Ubuntu 16.04 LTS
请要求提供任何进一步的信息。
答案 0 :(得分:2)
以下是可能的方法之一:
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