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

10.11.2006, 10:35

alle .cdef Files 1mal anzeigen

Hallo,

ich bin Fachinformatiker AZUBI =D und steh noch recht am Anfang was meine Erfahrung mit Linux (diese beträgt zur Zeit 2Wochen) betrifft.

Ich soll als Übung ein bash-script schreiben, der mir alle Dateien mit der Endung .cdef ausgibt. Gesucht werden soll auch den Links gefolgt.
(bis hier hin: find -name "*.cdef" -follow)
Mein Problem ist, dass ich nun manche Dateien Xmal bekomme. einmal das Orginal File und dann noch den Link. Der Pfad ist durch die (Hard-)Links ein anderer.

Später prüft dann ein andere Script, dem ich den Pfad der datei übergeben muss, ob die datei neu oder alt ist. (Dann: umändern-wenn-alt )
Der Performence halber soll jede Datei auch nur 1mal bearbeitet werden.

ich dachte, dass man mit
if [ -L ... ]
weiterkomme, aber irgendwie prüft das dann wohl nur ob die datei ein link ist und nicht ob zuvor ein hardlink auf ein verzeichnis verwiesen hat.


So ich hoffte ich konnt das jetzt irgendwie verständlich erklären :?

wäre nett, wenn ihr mir helfen könntet. Ich komm nämlich nicht wirklich weiter :-(



HIER der betreffende Ausschnitt von meinem Script:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    echo "bitte Dateiendung eingeben (mit Punkt):"
    read dateiEndung

    find . -name "*$dateiEndung" -follow > liste
    clear

    while true
    do

        echo "--- AUSGABE ALLER $dateiEndung - DATEIEN ---"
        echo
        echo
        echo "1  Liste der Dateipfade"
        echo "0  END"
        read menue


        if [ "$menue" = 0 ]
        then
            exit
        fi


        echo -e '\n\n\033[0;32m \t LISTE:\n \e[0m'

        while read zeile
        do

            if [ "$menue" = 1 ]
            then
                #if [ -L $zeile ]
                #then
                    echo  $zeile
                #fi
            fi

        done < liste

    done

  • »§igma« ist männlich

Beiträge: 1 409

Wohnort: Bayreuth

Beruf: Selbständig

  • Nachricht senden

2

13.11.2006, 13:32

Tag zusammen,

weiß hier evtl. jemand Rat?

Vielen Dank für eure Antworten.

MfG

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

3

13.11.2006, 15:41

RE: alle .cdef Files 1mal anzeigen

mir ist nicht ganz klar, warum du erst ein follow machst und dann die doppelt angezeigten dateien wieder ausfiltern willst???? was soll das?
aber wenns denn so sein muss, erstelle mit find die liste und lass dir die inode-nummer der files anzeigen (ls -i -1), dann entfernst du mit sort alle überzähligen zeilen, die mit dem selben feld (inode) beginnen.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

4

13.11.2006, 16:01

RE: alle .cdef Files 1mal anzeigen

(ich bin ja noch anfänger also bitte ich um verbesserung wenn ich was falsches sage)

angenommen ich habe dieses verzeichniss

/blub/data/dasIstNeDatei.cdef
/Data1/hierIsAuNEDatei.cdef
/blub/SOFTLINKaufData1/hierIsAuNEDatei.cdef
/blub/data2/SOFTLINKaufData1/hierIsAuNEDatei.cdef


(wir nehmen an mein script ist in blub)

nun sage ich find *.cdef -follow
dann bekomm ich doch:

./data/dasIstNeDatei.cdef
./SOFTLINKaufData1/hierIsAuNEDatei.cdef
./data2/SOFTLINKaufData1/hierIsAuNEDatei.cdef

lass ich nun -follow weg:

./data/dasIstNeDatei.cdef

(also fehlt mir ja dann eine datei)

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

5

13.11.2006, 16:07

RE: alle .cdef Files 1mal anzeigen

wie gesagt, dann mach es über die inode, die ist eindeutig (innerhalb eines filesystems) und wenn sie mehrmals in der liste auftaucht, sind das gelinkte dateien und können aus der liste entfernt werden.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

6

13.11.2006, 16:17

RE: alle .cdef Files 1mal anzeigen

vielen dank für die hilfe!
ich probiers gleich mal ob ich das hinbekomme...

7

14.11.2006, 14:18

RE: alle .cdef Files 1mal anzeigen

das ist mir jetzt fast peinlich diese gepfuschde lösung zu präsentieren =D

folgendes ist gepfuschd:
- ich will eigentlich nichts in einer datei speichern (gibt sicher auch arrays)
- echo .$( sort liste2 | grep -m 1 $inodeVar | cut -d'.' -f2 ) --> der punkt wird weggemacht und wieder hinzugefügt (TOP Lösung oder? :chinese: )
- $makeEmpty > liste2 (das geht sicher anderst)
...
- ach im allgemeinen ist der ganze Code gepfuschd, wer will kanns ja verbessern


Zu meiner verteidigung:
- ich kenn die ganzen befehle nicht
- hab mir keine mühe gemacht die befehle zu suchen
- bash-scripting is irgendwie komisch

naja egal hier der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
        echo "bitte Dateiendung eingeben (mit Punkt):"
	read dateiEndung

	find . -name "*$dateiEndung" -follow > liste

	$makeEmpty > liste2

	while read zeile
	do

		ls -i -1 $zeile >> liste2

	done < liste


	sort liste2 | cut -d'.' -f1 | uniq > inodes

	clear

	while true
	do

		echo "--- AUSGABE ALLER $dateiEndung - DATEIEN ---"
		echo
		echo
		echo "1  Liste der inodes"
		echo "2  Liste inode + dateipfad"
		echo "3  Liste der dateipfade"
		echo "0  END"
		read menue


		if [ "$menue" = 0 ]
		then
			exit
		fi


		if [ "$menue" = 1 ]
		then

			echo -e '\n\n\033[0;32m \t INODE - LISTE:\n \e[0m'
			sort inodes

		fi


		if [ "$menue" = 2 ]
		then

			echo -e '\n\n\033[0;32m \t INODE + PFAD - LISTE:\n \e[0m'
			while read inodeVar
			do

				sort liste2 | grep -m 1 $inodeVar

			done < inodes

		fi


		if [ "$menue" = 3 ]
		then
			echo -e '\n\n\033[0;32m \t PFAD - LISTE:\n \e[0m'

			$makeEmpty > liste

			while read inodeVar
			do

				echo .$( sort liste2 | grep -m 1 $inodeVar | cut -d'.' -f2 )

			done < inodes

		fi

	done

Thema bewerten