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 .NEF
Dateien und entsprechende Dateien für drei davon, also nur einige leere Dateien, an denen der zweite Befehl getestet werden kann.file1.NEF
file6.NEF
.JPG