skript zum löschen doppelter dateien

T

Tuxus4

Grünschnabel
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:
 
Zuletzt bearbeitet:
Du beendest
Code:
if [! -d $primaryFolderLocation] -o [! -d $secondaryFolderLocation] -o [$3 -eq 0] #bad input
nirgendwo.
 
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 `]'
 
Hallo

Warum nutzt du nicht fdupe ?

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

mfg
schwedenmann
 
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
 
Zuletzt bearbeitet:
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...
 
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
 
Zuletzt bearbeitet:

Ähnliche Themen

Switche abfragen über Script

Skript soll nicht doppelt laufen... kill pkill pid cron

Verschlüsseltes Backup-Script mit rsync

script sshpass

Shell Skript beschleunigen

Zurück
Oben