Как удалить все символические ссылки в каталоге?

Как удалить все символические ссылки в каталоге?

Я хотел бы удалить символические ссылки следующим образом:

unlink *

Однако там говоритсяunlink: extra operand

Я хотел бы удалить только файл ссылки, сохранив исходный файл.

решение1

Используя «*», вы пытаетесь отменить связь со всеми файлами и каталогами в вашем текущем местоположении.

unlink не может обрабатывать файлы или каталоги, он может обрабатывать только ссылки. Используйте команду find, чтобы найти все ссылки и отключить их, например:

find . -type l -exec unlink {} \;

решение2

Я бы избегал порождать другие процессы с помощью find … -exec …. Когда вам нужно unlinkили rmрезультаты find, используйте его-deleteвариант вместо этого.

find . -maxdepth 1 -type l -delete

Эта команда найдет все символические ссылки ( -type l) в текущем каталоге (не в подкаталогах; ваш *не спускается в подкаталоги, поэтому я предполагаю, что это то, что вам нужно) и удалит их. Поведение по умолчанию — не следовать символическим ссылкам, поэтому исходные файлы не будут затронуты.

решение3

Эта команда найдет и удалит все символические ссылки в текущей папке, она не будет рекурсивно переходить в подпапки и будет игнорировать dotfiles.

find . -maxdepth 1 -type l ! -name '.*' -delete

Связанный контент