Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Map met zere veel bestanden splitten  (gelezen 867 keer)

Offline RogierVLD

  • Lid
Map met zere veel bestanden splitten
« Gepost op: 2011/05/12, 12:11:28 »
Ha,

Ik ben de inhoud van een aantal oude harde schijven aan het samenvoegen op een Ubuntu server.
Een van de oude harde schijven bevat extreem veel bestanden. Het lijkt erop dat Ubuntu over zijn nek gaat. Het duurt in ieder geval erg lang om bijvoorbeeld ls te zien.

Heeft iemand een tip hoe ik snel kan zien hoeveel bestanden er in een map staan en verder vraag ik me af of er een commando is om de bestanden te kopieren naar een bepaalde mappenstructuur: acrhief1, archief2, etc en dan per 1000 bestanden ofzo.

Is er trouwens een vuistregel mbt het aantal bestanden in een map? Heeft dit ook nog met een bestandssysteem te maken? De aangekoppelde HDD heeft een FAT bestandssysteem.

Alvast bedankt!

Rogier

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: Map met zere veel bestanden splitten
« Reactie #1 Gepost op: 2011/05/12, 12:34:45 »
Het beste is in ieder geval in een Terminal (GUI's gaan eerder over hun nek met veel bestanden).

Het printen van info naar het scherm (je Terminal) kost relatief veel tijd. Soms kan het bijvoorbeeld veel sneller zijn om je uitvoer naar een bestand weg te schrijven, en vervolgens dat bestand openen met een tekst editor of less.
Ik weet niet echt waarom ls er zo lang over doet. Maar wat je zou kunnen proberen is wc (word count), hiermee kun je woorden of regels tellen. Als je de uitvoer van ls pipe-ed naar wc heb je een mooie combi. Als het printen naar scherm de reden is dat het zo lang duurt kun je het volgende proberen:
ls -f | wc -l
Het getal is de som van alle lijnen die ls uitpoept, dus het aantal bestanden in de huidige map.
Uitleg: ls -f = ls op zijn snelst
wc -l = tel alle regels
« Laatst bewerkt op: 2011/05/12, 12:37:29 door Rachid »
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline vanadium

  • Lid
Re: Map met zere veel bestanden splitten
« Reactie #2 Gepost op: 2011/05/12, 15:27:39 »
Het aantal bestanden op een bestandsysteem wordt beperkt door het aantal opslageenheden (inodes, clusters). Er is geen limitatie voor wat het aantal bestanden betreft in één directory (voor zover het aantal opslageenheden toelaat), maar directories die zeer veel bestanden bevatten, worden zeer traag om in te lezen en te manipileren. Voor wat FAT betreft, is de ruimte in de root directory wél beperkt.

Het zou mij nu sterk verbazen dat op al je oude schijven alle bestanden in één enkele directory staan. Als je al iedere schijf met behoud van zijn bestandsstructuur in een afzonderlijke directory op je server opslaat, dan moet je zeker komen tot een bestandssysteem die handelbaar is met het ext3 of ext4 bestandsopslagsysteem.

Anders is er wel een commandolijn te brouwen die bijvoorbeeld 1000 bestanden tegelijk wegschrijft naar verschillende directories (met een bash "for" loop bijvoorbeeld). Vrijwilligers?

Offline jan11000

  • Lid
Re: Map met zere veel bestanden splitten
« Reactie #3 Gepost op: 2011/05/12, 15:53:20 »
Onderstaande tekst in een 1000.sh file zetten.(file opstartbaar maken).
De 1000.sh in de map zetten en starten, dan worden alle files in mappen gezet per 1000 stuks.
Dit heb ik niet zelf gemaakt, heb ik wel gebruikt, en is niet perfect, dus eerst testen voor je het gebruikt.

tekst:

let fileCount=1000
let dirNum=1

for f in *
do
  [ -d $f ] && continue
  [ $fileCount -eq 1000 ] && {
      dir=$(printf "%03d", $dirNum)
      mkdir $dir
      let dirNum=$dirNum+1
      let fileCount=0
  }

  mv $f $dir
  let fileCount=$fileCount+1
done
« Laatst bewerkt op: 2011/05/12, 15:57:05 door jan11000 »

Offline rja

  • Lid
Re: Map met zere veel bestanden splitten
« Reactie #4 Gepost op: 2011/05/13, 17:34:54 »
Citaat van: jan11000
 knip
  mv $f $dir
  let fileCount=$fileCount+1
done
Wat is de bedoeling van die mv ?