Wie erkennt man Dateien mit gleichem Namen, aber unterschiedlichen Erweiterungen?

Wie erkennt man Dateien mit gleichem Namen, aber unterschiedlichen Erweiterungen?

Ich habe ein Verzeichnis, dessen Dateien die Erweiterung .JPG oder .NEF haben, und ich möchte die Dateien der Form X.NEF löschen, für die X.JPG im Verzeichnis nicht vorhanden ist. (X kann hier eine beliebige Zeichenfolge sein.) Ich weiß nicht, wie ich dies anders als manuell machen kann.

Eine allgemeinere Situation ist, wenn Sie alle Dateien in einem Verzeichnis A finden möchten, die auch im Verzeichnis B vorhanden sind. (Das erste Problem kann mit in das zweite umgewandelt werden mmv.)

Antwort1

${var%ext}Sie können die Parameterersetzungsfunktionen der Shell verwenden, um die ursprüngliche Erweiterung für jede Datei einzeln zu entfernen: zur Veranschaulichung

touch file{1..6}.NEF file{1,2,4,6}.JPG

Dann

for nef in *.NEF; do [[ -f "${nef%.NEF}.JPG" ]] || echo rm -- "$nef"; done

führt zu

rm -- file3.NEF
rm -- file5.NEF

Erläuterung:

Der erste Befehl erstellt einfach sechs nummerierte .NEFDateien und entsprechende Dateien für drei davon, also nur einige leere Dateien, an denen der zweite Befehl getestet werden kann.file1.NEFfile6.NEF.JPG

verwandte Informationen