Как удалить файлы, которых нет в другом каталоге?
У меня есть два каталога, давайте назовем их src
а также build
, Моя система сборки работает так, что для всех файлов с более поздним mtime src
чем в build
он копирует файл из src
в buid
и делает некоторые преобразования (минификация, управление версиями и т. д.). В противном случае пропускается, поскольку файл считается актуальным.
Это, однако, создает проблему при удалении исходного файла, так как его встроенная версия все еще присутствует в build
и попадает в файл карты, сгенерированный впоследствии.
$ ls src
example1.js
example2.js
$ ant do-the-stuff
...
$ ls build
example1.js
example1-12345.min.js
example2.js
example2-23456.min.js
.map
$ cat .map
example1.js=example1-12345.min.js
example2.js=example2-23456.min.js
$ rm src/example2.js
$ ant do-the-stuff
...
$ cat .map
example1.js=example1-12345.min.js
example2.js=example2-23456.min.js
Есть ли способ удалить файлы, которых нет в другом каталоге с помощью Ant? С точки зрения теории множеств это простая операция A\B.
Это то, что я уже пробовал, но не сработало:
<delete dir="build">
<exclude name="src/*" />
</delete>
<delete dir="build">
<exclude>
<fileset name="src" />
</exclude>
</delete>
<delete dir="build">
<fileset dir="build/*">
<not>
<present targetdir="src" />
</not>
</fileset>
</delete>
2 ответа
"Есть ли способ удалить файлы, которых нет в другом каталоге с помощью Ant"
да, используйте задачу удаления с набором файлов, используя presentselector, например
<fileset dir="/home/rosebud/temp/dir1" includes="*.jar" id="srcfileset">
<present present="srconly" targetdir="/home/rosebud/temp/dir2"/>
</fileset>
<echo>Files only in /home/rosebud/temp/dir1 => ${toString:srcfileset}</echo>
<delete>
<fileset refid="srcfileset"/>
</delete>
удалит все файлы, присутствующие только в /home/rosebud/temp/dir1
для обратного использования:
...
<not>
<present present="srconly" targetdir="/home/rosebud/temp/dir2"/>
</not>
...
см. также /questions/5927663/kak-poterpet-neudachu-na-pathelement-ne-suschestvuet-v-apache-ant/5927668#5927668 для другого примера использования текущего селектора
В Ant есть задачи depend
а также dependset
за это.
Они удаляют цели, для которых источники новее, но я думаю, что это может быть хорошо для вас.
В этом очень конкретном случае, depend
кажется правильным.
Пример:
<depend srcdir="src" destdir="build"/>