Назад | Перейти на главную страницу

Удалить несколько файлов со специальными символами

У меня есть машина, содержащая большое количество файлов, которые изначально были созданы на Mac с каким-то специальным символом в имени (не уверен, что именно). Когда я выполняю команду ls в терминале bash, эти файлы отображаются примерно так:

$ ls -al
ls: cannot access ._BLM?OAS: No such file or directory
ls: cannot access BLM?OAS: No such file or directory
total 20476
drwx------+ 43 Integr None       0 Sep  7 09:19 .
drwx------+ 16 Integr None       0 Sep  7 09:19 ..
-rwx------+  1 Integr None   24580 Jul  6 14:27 .DS_Store
???????????  ? ?      ?          ?            ? ._BLM?OAS
drwx------+  2 Integr None       0 Sep  7 09:19 66-North
.
.
.

Обратите особое внимание на ошибки после ls и файла со всеми? во имя этого. Теперь я знаю, что могу безопасно удалить файл ._, за исключением того, что когда я пытаюсь это сделать, он не работает:

$ rm ._*        
rm: cannot remove `._BLM?OAS': No such file or directory

Итак, как я могу удалить эти файлы? Их буквально несколько сотен, поэтому по одному не получится. Я знаю, что могу добавить флаг -delete, чтобы найти, чтобы удалить все найденные файлы, но выполняя команду find. -name "._ *" -delete 'приводит к той же ошибке (повторяется сотни раз). Спасибо.

Вы можете удалить файл, заключив его в одинарные кавычки:

wmoore@bitbucket(/tmp)$ touch '._BLM?OAS'
wmoore@bitbucket(/tmp)$ ls -l ._BLM?OAS
-rw-r--r--  1 wmoore users 0 Sep  7 14:04 ._BLM?OAS
wmoore@bitbucket(/tmp)$ rm -f '._BLM?OAS'
wmoore@bitbucket(/tmp)$ ls -l ._BLM?OAS
/usr/bin/ls: ._BLM?OAS: No such file or directory

Однако, поскольку статус файлов содержит кучу вопросительных знаков, это наводит меня на мысль, что у вас повреждена файловая система. Я рекомендую fsck, что может исправить данные.

Находятся ли эти файлы на томе LVM? Если это так, похоже, что вы потеряли один или несколько физических или логических томов в группе томов. Это вызовет ls -l чтобы показать все эти вопросительные знаки, потому что ls думает, что файл существует (поскольку он указан в индексном дескрипторе каталога), но не сможет stat чтобы получить разрешения, размер, право собственности и т. д., потому что inode фактически отсутствует.

У меня такое случалось раньше, но в моем случае LVM использовался коммерческой кластерной файловой системой (IBRIX), поэтому решение, которое я использовал, было несколько специфичным для этого продукта. У Novell есть страница, описывающая, как вы можете исправить проблемы LVM Вот это может быть полезно. В CentOS есть еще один Вот.

Однако, если это обычный старый раздел с некластеризованной файловой системой (например, ext3 на / dev / sda5 или что-то еще), тогда простой fsck может быть все, что вам нужно сделать.

Обязательно проверьте свои журналы и вывод из dmesg. Если вы действительно потеряли физический или логический том, вы должны увидеть ошибки LVM или соответствующих аппаратных устройств. Это даст вам некоторое представление о том, что на самом деле произошло, что вам нужно знать, чтобы это исправить.