Не могу `ls` длинное имя файла [дубликата]

1

На этот вопрос уже есть ответ здесь:

Используя CentOS 6.5, в моем каталоге есть файл, имя которого составляет 161 символ. Этот каталог является общим для хост-виртуальной машины (Windows) и гостевой виртуальной машины (Vagrant).

Я не могу получить к нему доступ с ls:

> ls long...file
ls: cannot access : No such file or directory

Я предполагаю, что это длинное имя файла может быть причиной сбоя процесса очистки сборки.

Кроме того, когда я ls -lrot каталог, содержащий файл, я вижу кучу вопросительных знаков, ???,

Какие варианты у меня есть, чтобы очистить этот файл?

Kevin Meredith
источник
Является ли файл на томе общим для системы Windows?
Daniel Beck
Да, это. Я попробовал как основные synched_folders, предлагаемые vagrant, так и smb ( docs.vagrantup.com/v2/synced-folders/smb.html ). Я испытываю вышеупомянутую проблему на обеих установках.
Kevin Meredith
2
Вот и ты. Не храните длинные пути (общая длина из Windows POV - т.е. C:\Users\Username\Documents\blablabla... ) длиннее примерно 260 символов) на томе, смонтированном Windows. Просто не работает. Есть некоторые обходные пути но у вас будет много головной боли, просто не делая этого.
Daniel Beck
Ах, так что не имеет значения, где он установлен на гостевой виртуальной машине: /vagrant или же /u01/a/b/c/, Проблема в том, что длина пути Windows слишком велика? Кроме того, - моя длина пути Windows + длинный файл = ~ 260, что соответствует числу, указанному вами как проблема
Kevin Meredith
Именно так. Если вы попытаетесь создать эти пути в Windows локально, у вас тоже будет сбой, без участия CentOS, Vagrant и т. Д. Я закрываю это как дубликат на данный момент. Нет причин хранить копию только потому, что обстоятельства таковы, что в вопросе даже не упоминается самая важная часть. Если вы обнаружите, что это на самом деле не связано с проблемой Windows, хотя вряд ли, пожалуйста, оставьте комментарий, чтобы сообщить мне.
Daniel Beck

Ответы:

3

Практически идеальное решение для файлов, которые нельзя удалить обычными средствами:

ls -il 

В первом столбце будет показан номер индекса файлов.

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

Это удалит файл с указанным номером inode после проверки.

Squeezy
источник
Этот ответ заслуживает любимого;)
phoops
Проблема с этим ответом состоит в том, что он может решить тонну различных вопросов, которые сами по себе совершенно не связаны, за исключением ответа. :(
Squeezy