[Linux] Pad verwijderen met MPUT

Pagina: 1
Acties:

  • [BoSS]
  • Registratie: Maart 2000
  • Laatst online: 18:51

[BoSS]

Geen woorden maar daden!

Topicstarter
Ik ben een BASH-script aan het schrijven om files in een directory automatisch te laten uploaden naar een FTP. Het probleem is, dat de bestanden in verschillende subdirectories op de lokale PC staan, maar in 1 map op de server moeten komen te staan.

Ik heb nu even een work-around proberen te maken die een lijst maakt van alle files in de subdirectories ($list) en daarna alle files in 1 directory zet (met cp $list) en ze daarna (met mput) naar de FTP gaat kopiëren, alleen dit werkt niet als er teveel files (>10.000) in de subdirectories staan, aangezien cp dan zegt "argument list too long".

De simpelste oplossing zou zijn om gewoon mput in de standaard linux ftp client aan te roepen, waarna met ntrans of nmap het pad uit de naam verwijderd word (local file: a/test.test word geupload als remote file: test.test) maar ik heb geen idee óf dit kan en zo ja hoe dit kan. Zou iemand mij kunnen helpen :?

20x 170 Wp (Solar Frontier) op ZZO / 54 graden


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 22:01

odysseus

Debian GNU/Linux Sid

code:
1
for i in `find .`; do mput `basename $i`; done

Dit werkt niet helemaal (je kunt niet gewoon 'mput bestand' draaien bijvoorbeeld, maar op deze manier moet je er wel uit kunnen komen denk ik :).

[ Voor 2% gewijzigd door odysseus op 25-05-2003 17:58 . Reden: Nog even een 'done' achter de code gezet, anders werkt het helemaal niet natuurlijk :). ]

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • [BoSS]
  • Registratie: Maart 2000
  • Laatst online: 18:51

[BoSS]

Geen woorden maar daden!

Topicstarter
Zoiets was mij al gelukt, maar ook dat krijg je het "argument list too long" verhaal, echter dan geeft mput (in ftp) die error in plaats van copy, maar je verplaatst het probleem er alleen maar mee. De mapnamen bestaan altijd uit 1 karakter, dus is het bijvoorbeeld niet mogelijk om in de standaard Linux ftp-client met ntrans of nmap (let op! het commando nmap in ftp, en dus niet het programma om portscans e.d. mee uit te voeren) de eerste twee karakters van een filename te verwijderen, of een filename te splitsen in 2 onderdelen (voor de / en na de /)?

20x 170 Wp (Solar Frontier) op ZZO / 54 graden


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 22:01

odysseus

Debian GNU/Linux Sid

Misschien dat je met lftp zoiets voor elkaar kunt krijgen, dat is een vrij geavanceerd FTP-programma. Het is echter ook gewoon mogelijk op de manier die ik beschreef, alleen moet je niet een for-loop gebruiken (want de argument-list daarvan wordt blijkbaar te groot), maar xargs. Met iets als 'find . -type f' krijg je alle bestandsnamen en als je dan via een pipe xargs aanroept ('| xargs ls {}'), dan kun je daarmee weer andere dingen uitvoeren. Omdat er slechts één bestand tegelijk wordt verwerkt zal xargs geen te lange argument-list krijgen.

* odysseus ziet overigens dat de hele berg dan nog steeds op één regel komt...het zou best al kunnen werken, maar als het nodig is dan is daar ook nog wel wat op te verzinnen...daar moet ik even over nadenken :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • JeroenE
  • Registratie: Januari 2001
  • Niet online
B_O_S_S schreef op 25 May 2003 @ 17:37:
De simpelste oplossing zou zijn om gewoon mput in de standaard linux ftp client aan te roepen, waarna met ntrans of nmap het pad uit de naam verwijderd word (local file: a/test.test word geupload als remote file: test.test)
Volgens mij is de simpelste oplossing dat je aan je ftp-client moet vertellen dat hij naar een andere dir moet gaan en dan weer bestanden moet mputten. Meestal werkt lcd om het de locale dir te wijzigen. Je krijgt dan iets als:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#/bin/sh
ftp -n 192.1.1.192 << FTP
user falco geheim
bin
prompt
cd /hier/moet/het/komen
lcd /hier/staat/deel1
mput *
lcd /hier/staat/deel2
mput *
lcd /hier/staatook/nogwat
mput *
bye
FTP

De commando's zijn een beetje afhankelijk van je ftp client. Je moet tussen de regel met << FTP op het eind en de regel met FTP gewoon alle commando's zetten die je normaal ook intypt. De -n is om te voorkomen dat er interactief om een user en pass gevraagd wordt. Die moeten dan dus wel eerst opgegeven worden. Bij andere clients (bijvoorbeeld lftp) kan je een user en pass op de commandline meegeven en is het user commando dus niet nodig.

NB Vergeet niet de read-permissies zo te zetten dat alleen jij in het scriptje kan kijken omdat anders iedereen het password kan zien. En bedenk sowieso of je wel een password in een bestand wil hebben staan...

[ Voor 6% gewijzigd door JeroenE op 26-05-2003 13:41 ]