Entfernen Sie die gleichnamigen Dateien aus dem Unterordner

316
Denham Coote

Wie kann ich bei folgendem Layout Dateien in den Attic-Ordnern löschen, die eine entsprechende Datei im übergeordneten Ordner haben? (Die Dateien haben den gleichen Namen und nicht unbedingt den gleichen Inhalt.)

/folder1 /Attic fileA.txt,v (problem file) fileA.txt,v fileB.txt,v FileC.txt,v /folder2 /Attic fileD.txt,v (another problem file) fileX.txt,v (NOT a problem file) fileD.txt,v fileE.txt,v FileF.txt,v 

Hintergrund: Ich versuche ein CVS-Repository für die Migration zu git aufzuräumen. CVS erstellt einen Ordner "Attic" für gelöschte Dateien. In den letzten 10 Jahren sind einige schlechte Dinge passiert, was bedeutet, dass Dateien mit demselben Namen sowohl im Ordner "lebendig" als auch im Ordner "tot" vorhanden sind. Ich bin mir der Risiken und Auswirkungen bewusst. Ich habe meine Daten gesichert und arbeite an einer Kopie.

0
Ich hätte erwartet, dass cvs-fast-export mit solchen Situationen richtig umgeht (afaik, sie sind nicht selten) - sind Sie sicher, dass das Repository nicht wirklich richtig migriert wird? grawity vor 7 Jahren 0
Ich muss nachforschen. Ich verwende cvs2git und in einem Unix-Terminal nicht ganz zu Hause. Es scheint keine Option zu geben, um die in Konflikt stehenden attischen Dateien zu löschen. Denham Coote vor 7 Jahren 0
Dann versuchen Sie es mit cvs-fast-export. Siehe auch http://esr.ibiblio.org/?p=5190 und http://esr.ibiblio.org/?p=4745. grawity vor 7 Jahren 0
Ich hatte keine Gelegenheit, sich die beiden oben genannten Links anzusehen - Firewall-Regeln bei der Arbeit mögen bestimmte Arten von Message Boards / Foren nicht. Ihr Skript hat jedoch den Trick bewältigt, und ich habe jetzt einen Hinweis darauf, ob Sie mit einem ähnlichen (Dateiverwaltungs-) Problem in der Zukunft konfrontiert sind. Denham Coote vor 7 Jahren 0

1 Antwort auf die Frage

2
grawity

In Bash:

shopt -s globstar; for file in ./**/Attic/*; do if [[ -e $/$ ]]; then rm -vf "$file"; fi; done; 

Mit globstar aktiviert ist, **passt Dateien rekursiv (unabhängig von der Tiefe). $und $erlauben das Entfernen des Präfixes oder Suffixes einer Variablen, so $ergibt sich der Verzeichnisname (minus "/ Attic / ..."), während $der Basisdateiname ist.

Sie sollten auch Tools wie cvs-fast-exportund betrachten reposurgeon; Ich würde erwarten, dass sie von Anfang an mit solchen Situationen richtig umgehen. Wenn nicht, dann stellen Sie sicher, dass Sie die neueste Version von cvs2git...

Das ist ein Vergnügen, danke! Als Bonus wird es nicht von Dateinamen mit Leerzeichen oder dem, v, geworfen. Sehr geschätzt! Denham Coote vor 7 Jahren 0