Dela upp en mapp med 255.000 filer i

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

Jag har lyckats tabba mig lite och har därför en mapp med några hundra tusen filer i. Den är omöjlig att jobba med förstås. Jag skulle vilja dela upp allt innehåll i mappar om 1000 t ex. Eller efter datum/klockslag eller något annat bra.

Någon som kan ett bra terminalkommando för att lösa detta...?

  • Medlem
  • 2015-11-18 17:27

Du har ingen TM-backup att gå tillbaks till, innan detta missöde?

  • Medlem
  • Göteborg
  • 2015-11-18 19:47

Du skulle kunna skapa ett diskimage av katalogen, det skulle vara lättare att dela ut och flytta över nätverket.

  • Medlem
  • Göteborg
  • 2015-11-18 19:52

nu är ju detta inget kommando... och jag är inge expert.
Men om du öppnar din heffamapp i ett fönster och sen ett fönster till med en ny, tom mapp så borde följande kunna fungera...
Sök i heffamappen på alla filer skapade mellan två datum. Markera alla och dumpa i ny mapp. Upprepa... Du har ju hela helgen på dig:)
/

Ursprungligen av carlsson:

Jag har lyckats tabba mig lite och har därför en mapp med några hundra tusen filer i. Den är omöjlig att jobba med förstås. Jag skulle vilja dela upp allt innehåll i mappar om 1000 t ex. Eller efter datum/klockslag eller något annat bra.

Någon som kan ett bra terminalkommando för att lösa detta...?

Ett förslag:

gammalifs=$IFS; IFS=$(echo -en "\n\b"); maxfilesinfolder=1000; mappnum=1; counter=$maxfilesinfolder; for i in *; do if [ ${counter} -eq $maxfilesinfolder ]; then mkdir mapp$((mappnum++)); counter=0; fi; mv "$i" mapp$((mappnum-1)); ((counter++)); done; IFS=$gammalifs

Jag går igenom det steg för steg:

  • Först sparas IFS undan (så att det går att återställa) och sätts sedan till ny rad istället för mellanslag (så man kan flytta filer med mellanslag i namnet)

  • Tre variabler, maxfilesinfolder, mappnum och counter initieras till vettiga värden

  • En for-loop med alla filerna (och mappar!) sätts igång

  • Om räknaren counter är lika med max antalet filer som du vill ha i en mapp skapas en ny mapp med ett löpnummer, mappnum räknas upp och räknaren sätts om till 0. Att räknaren initieras till maxfilesinfolder har att göra med att vi vill skapa en mapp direkt för att börja flytta till.

  • Sedan flyttas filen till den nyligen skapade mappen och räknaren räknas upp med 1.

  • Sist återställs IFS så det går att fortsätta jobba i terminalen.

Notera att du SKA ha en backup på filerna innan du kör kommandot! Jag har bara testat detta lite snabbt i min terminal på 10000 filer utan en massa specialtecken (bara mellanslag på ett gäng).

1
Bevaka tråden