1

У меня ниже структура каталогов.

drwxr-xr-x 5 ec2-user ec2-user 4096 May 22 07:03 TEEST  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 24 05:33 BEE-TES  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 24 10:53 ONE  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 25 09:50 TWO  
lrwxrwxrwx 1 ec2-user ec2-user   28 May 25 09:50 previous -> TWO  
drwxr-xr-x 5 ec2-user ec2-user 4096 Jun  1 11:00 TEMP  
lrwxrwxrwx 1 ec2-user ec2-user   28 Jun  1 11:00 current -> TEMP

Как удалить все каталоги, кроме тех, на которые указывают символические ссылки?

1 ответ1

4
{ find . -type l -exec readlink {} \; ; find . -type d -exec basename {} \; ; } | sort | uniq -u | tail -n +2 | xargs rmdir

В замедленном режиме:

  • find . -type l -exec readlink {} \; находит ссылки и перечисляет соответствующие каталоги
  • find . -type d -exec basename {} \; находит и перечисляет каталоги
  • вывод команд в фигурных скобках перечисляет все каталоги один раз, кроме тех, которые являются целью ссылок, которые появляются дважды
  • sort | uniq -u | tail -n +2 сохраняет только уникальные имена (то есть те каталоги, которые не связаны с) и удаляет их .
  • xargs rmdir удаляет каталоги. Замените на rm -r чтобы удалить их содержимое.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .