
Я хотел бы удалить символические ссылки следующим образом:
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