2017-10-11 6 views
-1

Ich bin brandneu zu Unix-Shell-Skripten. Ich habe Grundkenntnisse in Befehlen und versuche mein erstes Skript zu schreiben. Das Problem: Ich habe einen Archivordner mit vielen PDF- und DOC-Dateien. Viele von ihnen haben sowohl eine PDF- als auch eine DOC-Version, z. Hallo.doc und Hallo.pdf. Ich möchte alle PDF-Versionen dieser "Duplikate" mit identischem Dateinamen entfernen und es ist egal, ob der tatsächliche Dateiinhalt gleich ist oder nicht. Ich habe letzte Woche versucht, nach einer Lösung zu suchen, aber normalerweise fand ich nur Lösungen basierend auf dem Dateiinhalt.Unix-Shell-Skript, um doppelte Dateien mit dem gleichen Dateinamen, aber unterschiedliche Dateierweiterung zu entfernen

Vielen Dank für Ihre Hilfe.

+0

Willkommen bei StackOverflow! Bitte werfen Sie einen Blick auf die Anleitungen zu [Fragen stellen] (https://stackoverflow.com/help/asking), insbesondere [wie ein minimales, vollständiges und überprüfbares Beispiel erstellt wird] (https://stackoverflow.com)/help/mcve) – AesSedai101

Antwort

1

Sie könnten versuchen, so etwas wie:

for i in *.doc; do 
    pdffile=$(echo "$i"|sed 's/\.doc/\.pdf/') 
    if [[ -f "$pdffile" ]]; then 
    rm "$pdffile" 
    fi 
done 

Welche tut: für jede doc-Datei im aktuellen Verzeichnis eine Datei mit dem gleichen Namen, aber mit pdf, dann die pdf-Datei entfernen.

+0

Vielen Dank für die schnelle Antwort. Ich entschuldige mich für meine "Noobidity". Ich verstehe, dass "ich" eine Variable ist, aber muss ich es immer noch zuerst deklarieren oder kann ich den Code so implementieren, wie er ist? – PeterS

+0

@PeterS Sie können den Code ausführen, wie es ist, 'i' ist in der' for' Anweisung erklärt – Will

+0

Hallo ich habe versucht und immer den gleichen Fehler :::: rm: kann 'pdffile' nicht entfernen: Keine solche Datei oder Verzeichnis – PeterS

Verwandte Themen