Как я могу удалить все символьные ссылки со специальной целью?

Они находятся в $http_proxy, $https_proxy и $ftp_proxy переменные среды. Кроме того, $no_proxy содержит разделенный запятыми список шаблонов хоста, для которых не используется никакой прокси. Например:

http_proxy=http://proxy.example.com:3128/
no_proxy=localhost,127.0.0.1,*.example.com
44
26.05.2012, 02:37
6 ответов

Удостоверьтесь, что прочитали альтернативный ответ. Это является даже главным хотя не проголосовавший как высоко в этой точке.

Можно использовать это для удаления всех символьных ссылок:

find -type l -delete

с современным find версии.

На более старых версиях находки этому, вероятно, придется быть:

find -type l -exec rm {} \;
# or
find -type l -exec unlink {} \;

Для ограничения определенной целью ссылки, не принимая ни один из путей содержат любой символ новой строки:

 find -type l | while IFS= read -r lnkname; do if [ "$(readlink '$lnkname')" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done

или приятно отформатированный

 find -type l |
 while IFS= read -r lnkname;
 do
   if [ "$(readlink '$lnkname')" = "/your/exact/path" ];
   then
     rm -- "$lnkname"
   fi
 done

if мог, конечно, также включать более сложное условие, такое как соответствие шаблону с grep.


Адаптированный в соответствии с Вашим случаем:

find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q '^/usr/local/texlive/'); then rm "$lnk"; fi; done

или приятно отформатированный:

find -type l | while IFS= read -r lnk
do
  if readlink "$lnk" | grep -q '^/usr/local/texlive/'
  then
    rm "$lnk"
  fi
done
66
27.01.2020, 19:34
  • 1
    , эта команда удаляет все символьные ссылки? Посмотрите мое редактирование выше.. –  Marco Daniel 25.05.2012, 16:29
  • 2
    @Marco: да, первые три строки были бы. Редактирование большего количества :) –  0xC0000022L 25.05.2012, 16:30
  • 3
    я также добавил бы a -print в конце find команда для получения некоторой визуальной обратной связи. –  runlevel0 14.12.2016, 17:36

С современным find это поддерживает -lname:

find /usr/local/bin -lname '/usr/local/texlive/*' -delete

должен сделать это.

30
27.01.2020, 19:34
  • 1
    , Который является отличным и простым решением. Я протестировал, и это работает как очарование. Спасибо –  Marco Daniel 25.05.2012, 18:53
  • 2
    По-видимому, это должно быть find /usr/local/bin –  James Youngman 26.05.2012, 01:39
  • 3
    Даже современный, обязательно. GNU find имел -lname для дольше, чем я поддержал его (приблизительно с 2003). –  James Youngman 26.05.2012, 01:43
  • 4
    @JamesYoungman:Спасибо! современным find я действительно имел в виду GNU find.;) Я использовал usr/local/bin, потому что это - то, что использовал OP. –  Christoffer Hammarström 26.05.2012, 01:52

find решение является отличным.

На всякий случай Ваша находка не поддерживает -lname, вот иначе, который использует только оболочку и readlink.

cd /usr/local/bin
for f in *; do
  case "$(readlink "$f")" in /usr/local/texlive/*)
    rm "$f"
    ;;
  esac
done
5
27.01.2020, 19:34

Перейдите к своему пути и установите для себя конфигурацию пути

ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk '{print $9}'|xargs rm -rf
0
27.01.2020, 19:34

Сzsh:

rm -f /usr/local/bin(@e'{[[ $REPLY:P = /usr/local/texlive/* ]]}')

$REPLY:Pполностью разрешает путь к свободной символической ссылке -, поэтому, предполагая, что /usr/local/texliveсам по себе свободен от символической ссылки, он удалит все файлы, которые после разрешения символической ссылки находятся под /usr/local/textlive, что будет включать ссылки на /usr/local/texlive/foo, но также на ../texlive/bar, или на /usr/./local/texlive/whatever, или на /some/other/symlink, который сам по себе является символической ссылкой, указывающей на /usr/local/texliveи т. д.

1
27.01.2020, 19:34

sudo unlink /path/of/your/package

вот и всё

-2
08.05.2020, 20:46

Теги

Похожие вопросы