Удалить одноименные файлы из подпапки
Учитывая следующий макет, как я могу удалить файлы в чердачных папках, которые имеют соответствующий файл в родительской папке? (Файлы будут иметь одинаковое имя, не обязательно одинаковое содержимое)
/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
Справочная информация: я пытаюсь очистить хранилище CVS для перехода на git. CVS создает папку "Чердак" для удаленных файлов. За последние 10 лет произошло нечто плохое, что означает, что некоторые файлы с одинаковыми именами существуют как в живых, так и в мертвых папках. Я полностью осознаю риски и последствия. Я сделал резервную копию своих данных, и я работаю над копией.
1 ответ
В Баш:
shopt -s globstar;
for file in ./**/Attic/*; do
if [[ -e ${file%/*/*}/${file##*/} ]]; then
rm -vf "$file";
fi;
done;
С включенным globstar, **
сопоставляет файлы рекурсивно (независимо от глубины). ${var#text}
а также ${var%text}
разрешить удаление префикса или суффикса переменной, так ${file%/*/*}
приводит к имени каталога (минус "/Attic/…"), а ${file##*/}
это базовое имя файла.
Вы должны также рассмотреть такие инструменты, как cvs-fast-export
а также reposurgeon
; Я ожидаю, что они правильно справятся с такими ситуациями с самого начала. Если нет, то, по крайней мере, убедитесь, что у вас самая последняя версия cvs2git
...