Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

26.08.2005, 11:54

Unix

hallo,
ich soll ein script schreiben in unix und hab keine ahnung davon.

bisjetzt probier ich nur in einem verzeichnis die daten mit größe (geordnet) in ne text datei zu schreiben.( find . -name "*" -exec ls -s {} ; | sort -nr | grep -v Gesamt >ausgabe.txt´)

jetzt soll er noch daten die gleich groß sind oder den selben inhalt haben löschen eine davon.

später soll man ihm einfach ne liste mit verzeichnissen geben wo er dann nach doppelten dateien sucht.

Talon_Karrde

Fortgeschrittener

  • »Talon_Karrde« ist männlich

Beiträge: 197

Wohnort: Deutschland/NRW/Moers

Beruf: Netzwerk Ingenieur

  • Nachricht senden

2

26.08.2005, 12:12

Hallo,

muß es ein selbstgeschriebenes Script sein???
Denn es gibt ja genügend fertige Tools, die diese Aufgabe erledigen.
(fdupes, diff, etc.)

Gruß
Werner
_______________________________________________________________
Everything that is really great and inspiring is created by the individual
who can labor in freedom.

- Albert Einstein

3

26.08.2005, 12:40

ja mit diesen tools ein shell script

Talon_Karrde

Fortgeschrittener

  • »Talon_Karrde« ist männlich

Beiträge: 197

Wohnort: Deutschland/NRW/Moers

Beruf: Netzwerk Ingenieur

  • Nachricht senden

4

26.08.2005, 12:55

Hallo,

vielleicht versteh ich Dich ja nicht ganz, aber fdupes zum Beispiel kann
in einem bestimmten Ordner (auch recursiv) nach Dubletten suchen und diese
auch löschen.

Wenn das nicht das ist was Du machen sollst, schreib mal ganz genau auf
was Deine Aufgabe ist.

Gruß
Werner
_______________________________________________________________
Everything that is really great and inspiring is created by the individual
who can labor in freedom.

- Albert Einstein

5

26.08.2005, 13:29

ja aber wie ??

zeig mir nen bsp


hab keine ahnung davon

Talon_Karrde

Fortgeschrittener

  • »Talon_Karrde« ist männlich

Beiträge: 197

Wohnort: Deutschland/NRW/Moers

Beruf: Netzwerk Ingenieur

  • Nachricht senden

6

26.08.2005, 13:44

1) Feststellen ob fdupes zur Distribution gehört (bei SUSE z.B. mit yast2)
2) ggf. fdupes hier besorgen http://netdial.caribe.net/~adrian2/fdupes.html
3) fdupes installieren
4) MAN-Page lesen und wenn immer noch nicht klar noch mal Fragen

Gruß
Werner
_______________________________________________________________
Everything that is really great and inspiring is created by the individual
who can labor in freedom.

- Albert Einstein

7

26.08.2005, 13:53

kann nichts neues dazu installieren
das prog is auch nich drauf

hab keine rechte dafür

hab so die standard sachen halt

grep, diff, find usw

Talon_Karrde

Fortgeschrittener

  • »Talon_Karrde« ist männlich

Beiträge: 197

Wohnort: Deutschland/NRW/Moers

Beruf: Netzwerk Ingenieur

  • Nachricht senden

8

26.08.2005, 16:04

OK, jetzt versteh ich Dein Problem.

Hast Du überhaupt schon mal ein bash-Script geschrieben?
Wenn nicht mal im Internet schlau machen.

Ich schau mal ob ich einen Quick-Hack zustande bringe,
wird aber trotzdem vor Montag nichts mehr werden. Bin das
Wochenende ausgebucht.

Gruß
Werner
_______________________________________________________________
Everything that is really great and inspiring is created by the individual
who can labor in freedom.

- Albert Einstein

9

26.08.2005, 17:30

ja danke bis montag reicht ja

10

29.08.2005, 07:26

also bis jetzt hab ich das

# !/bin/ksh
find . -name "*" -type f -exec ls -d {} \; | grep -v Gesamt >temp.txt
while read name
do
sumerg=`sum "$name" | awk ' { print $1,$2 } ' `
groesse=`wc -c "$name" | awk ' { print $1 } ' `
echo "$groesse $sumerg $name"
done < temp.txt | sort -nr > ausgabe.txt


jetzt fehlt nur das er in der ausgabe.txt die ersten beiden spalten vergleicht werden mit anderen werten in der txt. wenn da irgendwo gleiche werte sonst wo stehen soll die eine gelöscht werden.

vielleicht schaffste das ja


vielen dank

Talon_Karrde

Fortgeschrittener

  • »Talon_Karrde« ist männlich

Beiträge: 197

Wohnort: Deutschland/NRW/Moers

Beruf: Netzwerk Ingenieur

  • Nachricht senden

11

29.08.2005, 12:35

Hallöle,

also mein Ansatz ist etwas anders. Ich geh davon aus das das Toll "diff"
auf Deinem System verfügbar ist.

Hab dann mal folgendes Script gebastelt, welches Dubletten in einem
als Parameter auf der Kommandozeile übergebenen Pfad sucht. Bis
jetzt allerdings nicht rekursiv.

Aber schau es Dir erst mal an.

Gruß
Werner




#!/bin/bash

INDEX="0"
I=""
ELEMENT=""
ANZ="0"
COUNT="0"

# ${1} ist der 1. auf der Commandline
if [ -d ${1} ];
# übergebene Parameter. Hier wird getestet
# ob es sich um ein Verzeichnis handelt

# wenn ja ...
then

# in das gewünschte Verzeichnis Wechseln
cd ${1}

# feststellen wieviele Objekte im Verzeichnis sind
ANZ=`ls | wc -l`

# für jedes Objekt ein Schleifendurchlauf
for I in `ls`;
do
# Index-Zähler um eins erhöhen
(( INDEX++ ))

# Dem Array "Element" die Namen der Dateien zuordnen
ELEMENT[${INDEX}]=${I}
done

# Die Dateien der Reihe nach miteinander vergleichen
for ((I=1 ; ${I}<${ANZ}; I++));
do

for ((K=$[ ${I}+1 ]; ${K}<=${ANZ}; K++));
do
# Der eigentliche Vergleich
if `diff ${ELEMENT[$I]} ${ELEMENT[$K]} &>/dev/null`;
then
echo " ${ELEMENT[$I]} ${ELEMENT[$K]} "
echo " Sind identische Dateien "
fi
done


done
else
echo "$1 ist kein Verzeichniss"
fi
_______________________________________________________________
Everything that is really great and inspiring is created by the individual
who can labor in freedom.

- Albert Einstein

12

29.08.2005, 12:41

danke das du dir so ne mühe gegeben hast

nur eine frage noch

was heißt das

./dopp.sh: line 34: syntax error near unexpected token `(('
./dopp.sh: line 34: `for ((I=1 ; ${I}<${ANZ}; I++));'

Talon_Karrde

Fortgeschrittener

  • »Talon_Karrde« ist männlich

Beiträge: 197

Wohnort: Deutschland/NRW/Moers

Beruf: Netzwerk Ingenieur

  • Nachricht senden

13

29.08.2005, 13:00

Bedeutet, das das Kommando nicht erkannt wird.

Du benutzt aber schon eine "bash"???

Evtl. hast Du Dir auch ein Steuerzeichen beim Kopieren des Scriptes
in Deinen Editor eingefangen.

Vielleicht noch mal von Hand in eine neuen Datei abtippen :keineahnung:

Gruß
Werner
_______________________________________________________________
Everything that is really great and inspiring is created by the individual
who can labor in freedom.

- Albert Einstein

14

29.08.2005, 13:07

ja mit der bash arbeite ich schon

15

29.08.2005, 13:14

kannste mir das mal von dir aus schicken per mail an (Email auf Wunsch gelöscht) als txt???

sonst muss man nichts im script einfügen oder??

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »freEze« (29.08.2005, 13:14)


Talon_Karrde

Fortgeschrittener

  • »Talon_Karrde« ist männlich

Beiträge: 197

Wohnort: Deutschland/NRW/Moers

Beruf: Netzwerk Ingenieur

  • Nachricht senden

16

29.08.2005, 13:42

Ist unterwegs.
_______________________________________________________________
Everything that is really great and inspiring is created by the individual
who can labor in freedom.

- Albert Einstein

17

29.08.2005, 13:51

geht trotzdem nich
noch immer

./dups.sh: line 34: syntax error near unexpected token `(('
./dups.sh: line 34: ` for ((I=1 ; ${I}<${ANZ}; I++));'


liegt es vielleicht daran das ich auf solaris ebene arbeite???

Talon_Karrde

Fortgeschrittener

  • »Talon_Karrde« ist männlich

Beiträge: 197

Wohnort: Deutschland/NRW/Moers

Beruf: Netzwerk Ingenieur

  • Nachricht senden

18

29.08.2005, 14:10

mhhhhhmmmmmmmm,

arbeitest Du wirklich mit Solaris, oder hast Du ein Linux für SUN?

Ich hab ein Debian Etch auf einer Sparc und da tut das Script einwandfrei.

Bist Du Dir mit der Shell sicher???
Mach mal "env | grep -i shell" und poste das Ergebnis hier.

Gruß
Werner
_______________________________________________________________
Everything that is really great and inspiring is created by the individual
who can labor in freedom.

- Albert Einstein

19

29.08.2005, 15:03

muss ich am dienstag machen
bin jetzt schon wieder zu hause

dank dir für deine hilfe

20

30.08.2005, 07:15

bash-2.03$ env | grep -i shell
SHELL=/usr/bin/ksh

und jetzt??

Thema bewerten