skript zum löschen doppelter dateien

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Tuxus4, 12.08.2012.

  1. #1 Tuxus4, 12.08.2012
    Zuletzt bearbeitet: 12.08.2012
    Tuxus4

    Tuxus4 Grünschnabel

    Dabei seit:
    12.08.2012
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,

    ich wollte mir ein Skript schreiben, das doppelte Dateien (gleicher Name) aus einem 2. Ordner löscht/verschiebt.

    Habe es jetzt soweit:

    Code:
      1 #!/bin/bash
      2 # find dublicates in secondary folder and move them
      3 primaryFolderLocation=$1
      4 secondaryFolderLocation=$2
      5 fileType="."$3
      6 
      7 trashFolder="/tmp/dublicates"
      8 
      9 if [! -d $primaryFolderLocation] -o [! -d $secondaryFolderLocation] -o [$3 -eq 0] #bad input
     10 then  
     11         echo "removeDublicates [primaryFolder] [secondaryFolder] [fileType]"
     12 exit 1  
     13 
     14 
     15 if [! -d $trashFolder]
     16 then
     17         mkdir /tmp/dublicates
     18 fi      
     19 
     20 
     21 primaryFolderFileList=echo $(ls -l $primaryFolderLocation | grep $filetype | awk '{print $9}')
     22 secondaryFolderFileList=echo $(ls -l $secondaryFolderLocation | grep $filetype | awk '{print $9}')
     23 
     24 for i in $primaryFolderFileList
     25 do 
     26         if [ -f $i ]
     27         then 
     28                 for x in $secondaryFolderFileList
     29                 do
     30                         if [-f $x] -a [$x = $i]
     31                         then
     32                                 echo $('dublicate: '${i}); # mv ${secondaryFolderLocation}/$x $trashFolder
     33                         fi      
     34                 done    
     35         fi      
     36 done  
    Es kommt immer die Meldung
    Code:
    Zeile 37: Syntax Fehler: Unerwartetes Dateiende.
    
    Was habe ich falsch gemacht ? :think:
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 marcellus, 12.08.2012
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Du beendest
    Code:
    if [! -d $primaryFolderLocation] -o [! -d $secondaryFolderLocation] -o [$3 -eq 0] #bad input
    nirgendwo.
     
  4. Tuxus4

    Tuxus4 Grünschnabel

    Dabei seit:
    12.08.2012
    Beiträge:
    5
    Zustimmungen:
    0
    oh, ok habe es nochmal geändert

    Code:
      1 #!/bin/bash
      2 # find dublicates in secondary folder and move them
      3 primaryFolderLocation=$1
      4 secondaryFolderLocation=$2
      5 fileType="."$3
      6 
      7 trashFolder="/tmp/dublicates"
      8 
      9 if [ -d "$primaryFolderLocation"] -a [ -d "$secondaryFolderLocation"] -a ["$3" -gt 0]
     10 then 
     11 
     12         if [ -d $trashFolder]
     13         then    
     14                 echo "dublicate folder already exists"
     15         else
     16                 mkdir /tmp/dublicates
     17         fi
     18 
     19 
     20         primaryFolderFileList=echo $(ls -l $primaryFolderLocation | grep $filetype | awk '{print $9}')
     21         secondaryFolderFileList=echo $(ls -l $secondaryFolderLocation | grep $filetype | awk '{print $9}')
     22 
     23         for i in $primaryFolderFileList
     24         do 
     25                 if [ -f $i ]
     26                 then
     27                         for x in $secondaryFolderFileList
     28                         do
     29                                 if [-f $x] -a ["$x" == "$i"]
     30                                 then
     31                                         echo $('dublicate: '${i}); # mv ${secondaryFolderLocation}/$x $trashFolder
     32                                 fi
     33                         done
     34                 fi
     35         done
     36 else
     37         echo "removeDublicates [primaryFolder] [secondaryFolder] [fileType]"
     38 fi
    Code:
    Zeile 9: [: Fehlende `]'
     
  5. #4 schwedenmann, 12.08.2012
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.635
    Zustimmungen:
    2
    Ort:
    Wegberg
    Hallo

    Warum nutzt du nicht fdupe ?

    Man muß das Rad nicht 30x neu erfinden, das scheint aber eine Linuxkrankheit zu sein.

    mfg
    schwedenmann
     
  6. #5 Tuxus4, 12.08.2012
    Zuletzt bearbeitet: 12.08.2012
    Tuxus4

    Tuxus4 Grünschnabel

    Dabei seit:
    12.08.2012
    Beiträge:
    5
    Zustimmungen:
    0
    Kenne fdupe nicht, würde aber gerne trotzdem wissen was ich falsch mache.

    Mir geht es mehr darum ein Skript selber zu schreiben und dabei etwas zu lernen. Das es skripte dafür gibt ist mir schon klar.

    Viele Grüße,
    Tuxus4
     
  7. Tuxus4

    Tuxus4 Grünschnabel

    Dabei seit:
    12.08.2012
    Beiträge:
    5
    Zustimmungen:
    0
    Zu fdupe " The script compares the file contents, not file names.".
    http://freecode.com/projects/fdupe

    Das würde mir nicht helfen, da ich nur die file Namen und nicht den Inhalt vergleichen will.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 Spröde, 13.08.2012
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Code:
    if [ -d "$primaryFolderLocation" -a  -d "$secondaryFolderLocation" -a "$3" -gt 0 ]
    Beachte das Leerzeichen vor der schließenden Klammer.

    "$3" -gt 0 geht als nächstes schief, wenn in $3 keine Zahl übergeben wurde...
     
  10. #8 Tuxus4, 13.08.2012
    Zuletzt bearbeitet: 13.08.2012
    Tuxus4

    Tuxus4 Grünschnabel

    Dabei seit:
    12.08.2012
    Beiträge:
    5
    Zustimmungen:
    0
    aha, Danke!

    Jetzt läuft es:
    Code:
    #!/bin/bash
    # find dublicates in secondary folder and move them
    primaryFolderLocation=$1
    secondaryFolderLocation=$2
    fileType="."$3
    
    trashFolder="${secondaryFolderLocation}/dublicates"
    
    
    if [ -d "$primaryFolderLocation" -a  -d "$secondaryFolderLocation" -a -n "$3" ]
    then 
    
    	if [ -d	$trashFolder ]
    	then 	
    		echo "dublicate folder already exists"
    	else
    		mkdir $trashFolder
    	fi
    
    	primaryFolderFileList=$(ls -l $primaryFolderLocation | grep $fileType | awk '{print $9}')
    	secondaryFolderFileList=$(ls -l $secondaryFolderLocation | grep $fileType |  awk '{print $9}')
    
    	for i in $primaryFolderFileList
    	do 
    		
    		echo "external loop: $i"
    		for x in $secondaryFolderFileList
    		do
    			#echo "internal loop: $x"
    			if [ $x == $i ]
    			then
    				echo "dublicate: $i" 
    				mv ${secondaryFolderLocation}/$x $trashFolder
    			fi
    		done
    	done
    else
            echo "removeDublicates [primaryFolder] [secondaryFolder] [fileType]"
    fi
    
     
Thema:

skript zum löschen doppelter dateien

Die Seite wird geladen...

skript zum löschen doppelter dateien - Ähnliche Themen

  1. Autostart-Skript für TightVNC löschen

    Autostart-Skript für TightVNC löschen: Hallo, ich habe auf meinem Raspberry Pi nach diesem HowTo (http://jankarres.de/2012/08/raspberry-pi-vnc-server-installieren/) TightVNC-Server...
  2. Shellskript zum löschen von Dateien

    Shellskript zum löschen von Dateien: Hallo Leute, ich habe eine regelmäßige Dateiflut auf einem Server. Dort werden jeden Tag Dateien erstllt. Bisher muss man da immer per Hand...
  3. Suche Ordner mit NUR alten Dateien zum Löschen! Skriptversuch.Bitte Hilfe.

    Suche Ordner mit NUR alten Dateien zum Löschen! Skriptversuch.Bitte Hilfe.: Hallo Leute, Ich möchte gerne ein Skript schreiben, welches bewirkt das Ordner (und Dateien) auf meinem FTP Server, die älter als 30 Tage sind...
  4. Skript für Papierkorb löschen !

    Skript für Papierkorb löschen !: x
  5. Skript erstellt File, soll nach 1 Monat wieder löschen

    Skript erstellt File, soll nach 1 Monat wieder löschen: Hallo! Ich hätte eine Frage, wie könnte ich ein Skript schreiben, der erstellt eine Datei, und soll sie wieder löschen. Z. B: rsync -urv >...