Ik heb een behoorlijk interessant probleem en ik heb moeite om een oplossing te vinden. De situatie is als volgt:
Ik heb twee mappen met veel bestanden en mappen (tienduizenden). Sommige van de bestanden tussen deze twee mappen zijn identiek in grootte, maar verschillen in bestandsnaam, bestandspaden en inhoud. Ik moet automatisch bestanden van dezelfde grootte in de eerste directory zoeken en vervangen door die uit de tweede, waarbij ik de directorystructuur en bestandsnamen van de tweede directory negeer.
Ik heb geprobeerd om fdupes en andere vergelijkbare tools te gebruiken , maar ze vergelijken de bestandsinhoud, dus het is geen optie.
Ik heb geprobeerd de gnome-search-tool te gebruiken om alle bestanden weer te geven en ze op grootte te sorteren, maar ze handmatig vervangen is gek omdat er duizenden zijn.
Ik heb de oplossing onderzocht die wordt gepresenteerd in https://stackoverflow.com/questions/7541616/how-to-find-files-with-same-size, maar geen enkele kon aan mijn behoeften voldoen.
Kan iemand me naar de juiste oplossing wijzen?
Попробуйте это в файле сценария bash:
#!/bin/bash
dir1="/REPLACE/THIS/WITH/FULL/PATH/TO/dir1/"
dir2="/REPLACE/THIS/WITH/Full/PATH/TO/dir2/"
echo "Indexing $dir2 ... Please wait ..."
find "$dir2" -type f -follow -exec ls -l {} \; > "dir2_ls_file.txt"
while read f1 f2 f3 f4 f5 f6 f7 f8 f9
do
size="${f5}"
name="${f9}"
result0=$(find "$dir1" -type f -size "$size"c -follow)
result1=$(echo "$result0" | wc -l)
result2=$(find "$dir2" -type f -size "$size"c -follow | wc -l)
if [ $result2 -gt 1 ]; then
echo "There is more than one file under $dir2 with the same size as $name , so no action is taken!"
elif [ $result1 -eq 1 ] && [ "$result0" ]; then
echo "$result0 is the same size as $name , so it will be replaced."
# cp "$name" "$result0"
else
echo "There is more than one file or no file under $dir1 with the same size as $name , so no action is taken!"
fi
done < "dir2_ls_file.txt"
Если вы удовлетворены результатом, снимите комментарий с cp "$name" "$result0"
для реального копирования.
Пожалуйста, сначала прочитайте здесь для получения дополнительной информации и мер предосторожности.
Обычно я синхронизирую свой жесткий диск с внешним, на котором хранится множество файлов и папок. Если вы не хотите возиться со скриптами, я рекомендую использовать сверхмощный и простой в использовании Freefilesync.
Есть несколько способов сравнить 2 папки по имени, размеру, содержимому, дате и т. д.
Скачать версию для Linux