Как удалить каталоги без символических ссылок в одной папке
У меня есть эта структура папок:
build.1
build.2
build.3
build.4
current -> symlink to build.4
previous -> symlink to build.3
Я использую Debian, как правильно удалить каждую сборку (= папку), на которую нет символической ссылки?
2 ответа
Как сказал Брон, официального способа сделать это не существует (точнее: его не может быть из-за структуры файловой системы, вы можете использовать только свой собственный). Это было бы так, как я написал бы в bash (при условии, что текущая структура, fgrep
слишком мягок, чтобы быть использованным вообще):
# Current list of symlinks (will return build.3 and build.4 in this case)
symed=`ls -1 | xargs -l readlink`;
# Loop over all build directories
for dir in build.*;
do
# Either it's a known symlink, or we remove it
fgrep -q $dir <<< $symed || rm -rf $dir;
done
Не очень "правильный" способ, но как часто вы это делаете? Мой обычный подход - запускать небольшой фрагмент Perl (выберите свой собственный яд), который читает содержимое каталога, проверяет символические ссылки и создает список каталогов для удаления.
Там нет метаданных в месте назначения символической ссылки, которая скажет вам, что она связана с.
Вы также захотите позаботиться об условиях гонки - если отдельная задача обновляет символические ссылки, вы не хотите удалять новый каталог до того, как он будет связан!