PDA

Bekijk Volledige Versie : GEZOCHT: Bash Scripter



Anoniem
26/08/10, 16:43
Ik ben op zoek naar iemand die mij een klein bash scriptje kan schrijven. De werking hiervan moet vrij rechttoe,rechtaan blijven. De werking moet zijn:

1. Haal alle bestanden in een map op de harde schijf op
2. Hussel ze in random volgorde
3. Schrijf alle bestanden met de absolute pathname weg naar een bestand

Bestandsnaam input en output moeten als variabele in te stellen zijn bovenin het script. Er zijn geen scriptingtalen zoals PHP en Perl aanwezig op het systeem.

Wat moet dat kosten en wanneer kun je dat opleveren?

Groeten,
Tim

dennis0162
26/08/10, 20:05
Ik heb dit even in elkaar gezet voor je.



#!/bin/sh

DIR="/root" # Directory welke uitgelezen moet worden voorbeeld: /root zonder / op het eind
DUMP="dump.txt" # Bestand waar hij alles moet dumpen voorbeeld: /root/dump.txt

# Start loop
for i in "$DIR"/*.*
do
echo ${i%%} >> $DUMP
done


# RANDOM
cat $DUMP | awk 'BEGIN{srand();}{print rand()"\t"$0}' | sort -k1 -n | cut -f2- > $DUMP.tmp

# Verwijder TMP file
rm -rf $DUMP
mv $DUMP.tmp $DUMP

DutchTSE
26/08/10, 20:10
Als we dan toch aan het script battelen zijn, mijn bijdrage:



#!/bin/bash
DIRECTORY="/root"
OUT_FILENAME="/root/dump.txt"

`ls -d -1 $DIRECTORY/*.* > /tmp/array.txt`
`shuf /tmp/array.txt -o $OUT_FILENAME`
rm -f /tmp/array.txt


:p

@ Dennis:
1. Spreek me even aan op MSN
2. Jou script neemt ook directories mee naar dump.txt?

dennis0162
26/08/10, 20:43
Hij neemt alleen bestanden mee.
Het scriptje van jouw is een stuk korter en makkelijker.

MediaServe
26/08/10, 21:11
Gewoon één regel moet toch voldoende zijn? :p


find /folder/ -maxdepth 1 -type f | sort -R > /output.txt



Bestandsnaam input en output moeten als variabele in te stellen zijn bovenin het script.

Oke, dan zoiets:


#!/bin/bash
RANDOMFOLDER=/folder/
OUTPUTFILE=/output.txt
find $RANDOMFOLDER -maxdepth 1 -type f | sort -R > $OUTPUTFILE

DutchTSE
26/08/10, 21:30
Gewoon één regel moet toch voldoende zijn? :p


find /folder/ -maxdepth 1 -type f | sort -R > /output.txt




Oke, dan zoiets:


#!/bin/bash
RANDOMFOLDER=/folder/
OUTPUTFILE=/output.txt
find $RANDOMFOLDER -maxdepth 1 -type f | sort -R > $OUTPUTFILE



man sort




-R, --random-sort
sort by random hash of keys


Jij wint :W:

Anoniem
26/08/10, 23:42
lol. Allen bedankt! Als het in 1 regel kan dan hoef ik ook geen variabelen bovenaan te hebben, dus dan wint het 1 (of 2) regel grote scriptje van Mediaserve! :D

Als ik wil zoeken in ALLE submappen, maakt niet uit hoe diep het gaat en met extensie .jpg maar ook .JPG hoe krijg ik dat dan nog voor mekaar met deze van Mediaserve:


find MAP_X -type f -name *.jpg | sort -R > FILES.LST

Luana IS
27/08/10, 03:25
voor de diepte denk ik dat je maxdepth op 10 moet zetten ofzo

Anoniem
27/08/10, 11:28
Ik bedoel: hoe zoek ik op .jpg waarbij de CaSe (hoofdlettergebruik) niet bekeken wordt?

daveww
27/08/10, 11:31
Ik bedoel: hoe zoek ik op .jpg waarbij de CaSe (hoofdlettergebruik) niet bekeken wordt?Zo 1-2-3 gezocht is '-iname' case-sensetive en '-name' niet...?
http://www.devdaily.com/blog/post/linux-unix/case-insensitive-file-searching-unix-linux-mac-osx

MediaServe
27/08/10, 11:34
find /folder/ -maxdepth 1 -type f | grep -i -e ".jp[e]*g$" | sort -R > /output.txt