У моєму домашньому каталозі є файл з ім'ям ~ (tilde)


46

Я щойно помітив, що у мене є файл, названий ~у моєму ~-директорії.

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

Будь-яка ідея, як я можу це mvчи rmце?


Спробуйте видалити його i-node.
gronostaj

Відповіді:


55

Це майже остаточне рішення, коли справа стосується файлів, які неможливо видалити звичайними засобами:

ls -il 

У першому стовпці буде показано номер inode файлів.

find . -inum [inode-number] -exec rm -i {} \;

Це видалить файл із вказаним номером inode після перевірки.


Це спрацювало. Можливо, рішення Rici теж добре, але я не намагався. Дуже дякую!
scrrr

Так, відповідь Rici також хороша. І я думаю, що це краще, тому що це простіше.
Андрій Регентов

приємно, +1. Я змінив вашу відповідь на використання -deleteзамість -exec, а потім зрозумів, що ви використовуєте, rm -iщо є хорошою ідеєю, тому я відкотився назад. Вибачте.
тердон

Не хвилюйся. Завжди раді, коли хтось вважає мої відповіді гідними свого часу :)
Squeezy

Ця відповідь не спрацювала для мене. Ubuntu 14.04 LTS
KhoPhi

46

Ви повинні мати можливість посилатися на цей файл як ~/~(без лапок), оскільки tilde-розширення застосовує лише tilde ( ~) на самому початку слова.


17
також, перейшовши до папки і rm ./~, з тієї ж причини, яку ви сказали
Карлос Кампдеррос

@ CarlosCampderrós розглядає можливість відповіді. Я вважаю це "найкращим" та найпростішим рішенням, порівняно з іншими відповідями, оскільки ./~буквально означає "файл або папку, названу ~в поточному каталозі" . Немає таких хак, як символи втечі або посилання на inode.
ADTC

@ADTC: на захист моєї відповіді, вона не потребує зміни CWD, тоді як використовує ./~так. Через п’ять років моя пам’ять трохи нечітка, але я вважаю, що саме тому я запропонував, ~/~а не більш нормальне ./~: питання конкретно стосується "файла, названого ~в домашньому каталозі [ОП] "; не "у поточному каталозі".
rici

@rici Це має сенс, і в контексті питання це було б доречно. Але мені подобається бачити відповіді, які є загальними, або загалом висловлюються спочатку, перш ніж викласти докладніше конкретний випадок. Це мій захист: D
ADTC

20

Цитуйте його ( rm '~') або уникайте ( rm \~).


Це завжди або з цих (також, наприклад, $), або додати, --щоб запобігти інтерпретації імені файлу як аргумент: rm -- -iвидаляє названий файл -i; також корисно, rm -- *коли ви хочете видалити всі файли в поточному каталозі: Не випадково rm -f *лише тому, що файл названий таким чином.


Гм, ні, це, здається, не працює .. Я спробував одиничні цитати, втікачі та зворотні посилання .. він не збирає файл. Каже, що він не існує, або інтерпретує ~ як домашній каталог ..
scrrr

@scrrr Яка ваша оболонка?
Даніель Бек

баш Але проблема вирішила inode способом.
scrrr

@scrrr Радий, що ваша проблема вирішена, але тепер я хочу знати, чому втечі баш-файлу не працюють так само, як у моїй системі.
Ісаак Рабінович

1
Дбайливий. --лише припиняє інтерпретувати наступні аргументи як параметри - це не заважає оболонці здійснювати її розширення (наприклад *), що саме тут відбувається. (Я знаю, ви запропонували це як альтернативу для інших ситуацій, але попередження було б добре.)
Боб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.