Hitta saknade filer efter flytt

Tråden skapades och har fått 3 svar. Det senaste inlägget skrevs .
1

Jag lät Itunes flytta mina musikfiler från en för trång extern hårddisk till en ny.
När jag jämför mapparna (visa info i finder) saknas 135 filer på den nya placeringen.

För att hitta vilka använde jag terminalen:
diff -qr /sökväg/till/musikbibliotek1 /sökväg/till/musikbibliotek2

Tyvärr har itunes lagt till låtordningsnummer i samtliga filnamn vid flytten vilket gör att terminalen tycker att alla filer är olika:
Only in /sökväg/till/musikbibliotek1/A Camp/a camp: such a bad comedown.m4a
Only in /sökväg/till/musikbibliotek2/A Camp/a camp: 04 such a bad comedown.m4a

Tips på andra sätt att lösa problemet eller komma runt det?

Du skulle kunna ta och jämföra checksummor med shasum och uniq med -f flagga.

Ursprungligen av suddgummi:

Du skulle kunna ta och jämföra checksummor med shasum och uniq med -f flagga.

Tack för svar, men diff-sökningen här var första gången jag överhuvudtaget öppnade terminalen så det du skriver är tyvärr rena grekiskan för mig…

Ursprungligen av ppralin:

Jag lät Itunes flytta mina musikfiler från en för trång extern hårddisk till en ny.
När jag jämför mapparna (visa info i finder) saknas 135 filer på den nya placeringen.

För att hitta vilka använde jag terminalen:
diff -qr /sökväg/till/musikbibliotek1 /sökväg/till/musikbibliotek2

Tyvärr har itunes lagt till låtordningsnummer i samtliga filnamn vid flytten vilket gör att terminalen tycker att alla filer är olika:
Only in /sökväg/till/musikbibliotek1/A Camp/a camp: such a bad comedown.m4a
Only in /sökväg/till/musikbibliotek2/A Camp/a camp: 04 such a bad comedown.m4a

Tips på andra sätt att lösa problemet eller komma runt det?

Det blev ett lite mer komplicerat kommando än vad jag tänkt, men detta borde göra det du vill:

diff -qr /sökväg/till/musikbibliotek1 /sökväg/till/musikbibliotek2 | grep -E "^Only in /sökväg/till/musikbibliotek*" | sed -n 's/://p' | awk '{print $3"/"$4}' | xargs shasum | awk '{print $1}' | sort | uniq -u

Vad det gör är att ta alla filer som diff tycker bara finns i en katalog, matar det till shasum via lite textfiltrering och filtrerar ut de unika checksummorna med hjälp av uniq -u. Tyvärr matar shasum ut checksumman först, därför får man köra ett kommando till emellan istället för flaggan jag pratade om tidigare.
Om du nu har filer som är olika kommer du få några olika checksummor listade på varsin rad. För att då få reda på vilka filer det gäller kan du ersätta en del av föregående kommando med ett grep som maskar ut de filer som är olika, t.ex:

diff -qr /sökväg/till/musikbibliotek1 /sökväg/till/musikbibliotek2 | grep -E "^Only in /sökväg/till/musikbibliotek*" | sed -n 's/://p' | awk '{print $3"/"$4}' | xargs shasum | grep -E "^CHECKSUMMAN"

Ersätt CHECKSUMMAN med de eventuella checksummor som du får listat.

Om man vill bygga vidare kan man kombinera allt i två separata kommandon, där det första matar det andra med checksummorna:

SUMMOR=$(diff -qr /sökväg/till/musikbibliotek1 /sökväg/till/musikbibliotek2 | grep -E "^Only in /sökväg/till/musikbibliotek*" | sed -n 's/://p' | awk '{print $3"/"$4}' | xargs shasum | awk '{print $1}' | sort | uniq -u) && diff -qr /sökväg/till/musikbibliotek1 /sökväg/till/musikbibliotek2 | grep -E "^Only in /sökväg/till/musikbibliotek*" | sed -n 's/://p' | awk '{print $3"/"$4}' | xargs shasum | grep -E "$SUMMOR"

Man kan gå omvägen genom att skapa en temporär fil också, så kommer man undan det att köra två diff kommandon på samma filer vilket är tidödande. Då skulle man kunna göra något liknande detta för att bara köra en diff och en shasum:

TMPFIL=$(mktemp -t tempfil) && diff -qr /sökväg/till/musikbibliotek1 /sökväg/till/musikbibliotek2 | grep -E "^Only in /sökväg/till/musikbibliotek*" | sed -n 's/://p' | awk '{print $3"/"$4}' | xargs shasum > $TMPFIL && SUMMOR=$(cat $TMPFIL | awk '{print $1}' | sort | uniq -u) && cat $TMPFIL | grep -E "$SUMMOR" | cut -d' ' -f3- && rm $TMPFIL

Vad som händer där är att först skapas en temporär fil, som sparas undan i variabeln TMPFIL, sedan körs diff kommandot som filtrerar ut de filnamn som bara finns i vardera katalog (på grund av filnamnsändring), kör dem genom shasum för att skapa checksummor och sparar checksummorna och filnamnen i filen TMPFIL.
Denna fil är sedan till grund för att filtrera ut de unika checksummorna med hjälp av sort och uniq, vilka sparas i variabeln SUMMOR. Sedan används återigen TMPFIL som indata, fast till grep som filtrerar ut de filer vars checksummor inte stämde överens och cut används för att få bort checksummorna och bara visa sökvägarna till de filer som är olika i mapparna. Till sist tas TMPFIL bort för att inte man ska få en massa temporära filer kvar.
Kvar i Terminalen kommer du att få en lista på de filer som skiljer, baserat på checksumman.

Det är rätt omständligt och går säkert att göra bättre, men det är så jag fick det att funka här.
Hoppas det kan hjälpa dig något i alla fall. Du får ersätta sökvägarna, men det har du säkert förstått.

1
Bevaka tråden