Видаліть файл в Linux, використовуючи номер inode


15

Якщо ви створюєте файл в UNIX / Linux із спеціальними символами, такими як touch \"la*, ви не можете його видалити rm "la*. Ви повинні використовувати номер inode (ви можете, якщо ви додасте \до цього імені, я знаю, але вам, як користувачеві, доведеться здогадатися, що воно було використано при створенні файлу).

Я перевірив manpage на rm, але про номер inode не згадується. Так rm inodenumberсамо не працює.

Яка команда для цього?

Відповіді:


24

Деякі інші методи включають:

уникаючи спеціальних символів:

[~] $ rm \ "la \ *

скористайтеся командою find і виконайте пошук тільки в поточному каталозі. Команда find може шукати номери inode та має зручний -deleteперемикач:

[~] $ ls -i
7404301 "ла *

[~] $ знайти. -maxdepth 1 -тип f -inum 7404301
./"la*

[~] $ знайти. -maxdepth 1 -тип f -inum 7404301 -delete
[~] $ ls -i
[~] $

Хе, використовувати пошук, безумовно, буде простіше, ніж моя пропозиція, я ніколи не помічав -inum :)

У Find є багато чудових комутаторів, які потрібно досліджувати, це мій інструмент ножа швейцарської армії, щоб бути абсолютно чесним :)
Джон Т

t: о так правда.
акіра

У Solaris немає параметрів "-delete" "-maxdepth".
guthrie

Ви повинні обмежити пошук -xdevопцією, оскільки в інших змонтованих файлових системах також можуть бути непов'язані файли з тим же номером вводу.
Йонас Берлін

5

Можливо, мені чогось не вистачає, але ...

rm '"la*'

У будь-якому випадку, у назви файлів немає входів, файли. Спроба видалити файл без видалення всіх імен файлів, які вказують на нього, може пошкодити вашу файлову систему.


добре, це працюватиме лише для поточного каталогу, але це справді є вагомою причиною для занепокоєння. Дурне, що я пропустив це. Проте файл не видаляється.
KdgDev

3
Звичайно, ні. Файл видаляється лише тоді, коли на нього більше не вказуються назви файлів і не відкриваються процеси.
Ігнасіо Васкес-Абрамс

5

Якщо ви дійсно хочете це зробити - і ваш випадок використання насправді зовсім не такий, як вам потрібно, ви можете спробувати інструменти налагодження файлової системи. Якщо ви готові все втратити, то це.

Наприклад, для ext2 / 3/4 debugfsкоманда має параметр "kill_file", який, здається, приймає inode. Як уже згадувалося в інших відповідях, це буде пошкодити вашу файлову систему, як буде записів каталогу , що вказують на неіснуючий файл. fsckПісля запуску це може бути виправлено. Навряд чи можна це зробити у змонтованій файловій системі.

Але я настійно рекомендую просто скористатись відповідними скачуванням / цитуванням та видаленням таких файлів за допомогою звичайної rmкоманди, як згадувалося у попередній відповіді, - і використовувати rm -iдля додаткової безпеки при роботі з назви файлів, що містять символи, що поширюються на зразок *


1

Хоча я настійно рекомендую підхід "уникнути особливих символів", завжди є clriкоманда, коли ви дійсно хочете виправити пошкодження файлової системи.


2
Слід зазначити, що clriзазвичай він присутній лише в системах Oracle (наприклад, SunOS).
can-ned_food


1

Проблема, яку я мав, - видалити ім'я файлу, яке починається з тире - rm завжди хоче інтерпретувати його як ім'я хоста. Я вирішив це за допомогою:

rm ./-g4xxx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.