2 Verzeichnisse nur Dateinamen syncronisieren

Hans-Ulrich

Aktives Mitglied
Thread Starter
Dabei seit
07.09.2005
Beiträge
564
Reaktionspunkte
56
Hallo,
habe mich mit allen möglichen Programmen auseinandergesetzt...
Mein Problem - vorhanden:
Verzn.1
bild1.dng
bild2.dng
bild3.dng
...
bild 299.dng

Die entwickelten Bilder kommen in
Verzn.2
bild1.jpg
bild3.jpg
...
bild299.jp

bild2, bild 7 usw. wurden nicht entwickelt und entfallen.

Bei 300 Bildern die dng Dateien finden die nicht entwickelt wurden ....
Sync und Compare Tools, ob Kommandozeile oder GUI, verwenden stets den Suffix mit.
Nur den Dateinamen vergleichen will ich …
Ich möchte vor dem Sichern der Rohdaten (dng) alle entfernen die nicht entwickelt wurden
um etwas Ballast zu vermeiden. Ich weiß HDDPlatz ist nicht so teuer…
Aber verwackelt oder total verschoben … sind es nicht wert gespeichert zu werden.
Es gibt keine Anzeige wo nur nicht entwickelte dng Dateien angezeigt werden.
Jedenfalls habe ich es nicht hinbekommen, wobei ich bei Unix keine Leuchte bin.

zB. diff Verzn.1 Verzn.2 # aber nur der Dateinamen ???
Kann mir jemand helfen ??

Frohes Schaffen !
 
das hatten wir erst vor noch nicht so langer zeit. ich find es aber grade selbst nicht mehr. :p

Code:
#!/bin/bash
#set -vux
#
# leftdelete
# delete files in dir1 if basename counterpart is missing in dir2
# dir1/file.ext1 <==> dir2/file.ext2
# (c) Olivetti 2017
#

[[ "${1}" = "-h" ]] && echo "Syntax: ${0##*/} [-h]" && { sed '/^#$/,/^#$/!d;//d' "${0}"; exit 1; }

dir1="dir1"
dir2="dir2"

ext1="dng"
ext2="jpg"

for f in ${dir1}/*.${ext1}
 do
  file="${f%.${ext1}}"
  file="${file##*/}"
  [[ ! -f "${dir2}/${file}.${ext2}" ]] && echo rm -v "${f}" # dry-run, remove echo to execute
 done
 
Zuletzt bearbeitet:
Hallo,
also so schnell…
aber ich bekomme nur Fehlermeldungen, kann aber nicht sehen was für eine ………
Was ich getan habe:
im Script dir1 und dir2 durch die richtigen Pfade ersetzt;
Das Script als Automatoraktion definiert -> s.o.

leider, aber DANKE für die Mühe
 
ach, als automatorzeugs.
speicher das script als textdatei ab, passe die beiden pfade an und dann rufst du es im terminal auf mit "bash leftdelete". ausgabe hier posten.
 
Hallo,
Vielen Dank !
So sieht es genau aus
Code:
#!/bin/bash
#set -vux
#
# leftdelete
# delete files in dir1 if basename counterpart is missing in dir2
# dir1/file.ext1 <==> dir2/file.ext2
# (c) Olivetti 2017
#

[[ "${1}" = "-h" ]] && echo "Syntax: ${0##*/} [-h]" && { sed '/^#$/,/^#$/!d;//d' "${0}"; exit 1; }

dir1="/Users/Hans-Ulrich/Pictures/Entwickeln/RAWs"
dir2="/Users/Hans-Ulrich/Pictures/Entwickeln/JPG"

ext1="dng"
ext2="jpeg"

for f in ${dir1}/*.${ext1}
 do
  file="${f%.${ext1}}"
  file="${file##*/}"
  [[ ! -f "${dir2}/${file}.${ext2}" ]] && echo rm -v "${f}" # dry-run, remove echo to execute
 done

und das ist das Ergebnis:
Code:
Hans-Ulrichs-iMac:~ Hans-Ulrich$ bash /Users/Hans-Ulrich/leftdelete.txt
rm -v /Users/Hans-Ulrich/Pictures/Entwickeln/RAWs/*.dng
Hans-Ulrichs-iMac:~ Hans-Ulrich$

und keine Veränderungen :-(
 
es passiert deswegen nix, weil echo noch eingebaut ist (dry-run/simulation). :p

aber, da sollte eigentlich mindestens ein dateiname statt *.dng ausgegeben werden.
poste bitte mal "bash --version" und "shopt".
 
Hallo,
danke für die Hilfe und Geduld !

Last login: Wed Dec 6 14:40:33 on ttys000

Hans-Ulrichs-iMac:~ Hans-Ulrich$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.
Hans-Ulrichs-iMac:~ Hans-Ulrich$ bash -shopt
allexport off
braceexpand on
emacs on
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor off
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
bash-3.2$
 
Ich prüf das trotzdem noch. Bin aber z.zt. noch unterwegs.
 
Zurück
Oben Unten