比较Linux中多个文件的文件名和md5sums
问题描述:
我在写一个bash脚本,它将图像从一个目录(及其所有子目录)复制到另一个目录。比较Linux中多个文件的文件名和md5sums
到目前为止,我有这样的:
find . -type f -regextype posix-extended -regex '^.*IMG_[0-9]{4}\.jpg' -exec cp {} ~/$output \;
这工作,但问题是比这更复杂。有两种情况:
- 一些图像具有相同的名称,但是是不同的。在这个 的情况下,他们将被重新命名,只需在名称的末尾添加第二个“.JPG”即可。
- 但是,如果两个文件具有相同的名称并且是相同的文件,则只应将一个文件复制到输出目录,并将另一个文件的绝对路径写入文本文件 - duplicates.txt。
我在想我需要在文件名上使用cmp,然后使用md5sum来检查相同的文件,但是我不确定如何在文件名上使用cmp,或者甚至可能。
在此先感谢您的帮助!
答
这并没有完全测试,但这是否对你有用?基本上只是围绕从find
输出循环,检查您指定的条件,并执行适当的操作。输入目录作为第一个参数传递,作为第二个参数输出。
#!/bin/bash
input=$1
output=$2
logfile=~/duplicates.txt
while IFS= read -r -d '' f
do
#strip the input directory name from the file
f=${f/$input\//}
echo Working with $f
#check if the file exists
if [ -f "$output/$f" ]; then
if cmp -s "$input/$f" "$output/$f"; then
#file is identical
echo "$f" >> "$logfile"
else
#same filename, but different file
cp --parents -p "$input/$f" "$output/$f.JPG"
fi
else
cp --parents -p "$input/$f" "$output/$f"
fi
done< <(find "$input" -type f -regextype posix-extended -regex '^.*IMG_[0-9]{4}\.jpg' -print0)
+0
嘿,对不起,它花了一段时间回到你身边... 我试着运行你的代码,它给了我3个错误。显然是“:第4行找不到命令”(可能是因为没有第4行) 和第22行的2个错误,有关语法 – x4iiiis
'fdupes'命令可能会做你想做的。 –
'cmp'告诉你文件是否相同,它逐字节地进行比较。 –