LinuxForum.Fans
Тема

Проблема с директорией

Автор: phant0m 17 сообщений 2913 просмотров
#248207

Мне дали архив. Я его распаковал и получилась папка с таким именем. Ни зайти в нее, ни удалить и переименовать не могу. Как от нее избавиться? А еще лучше, как сделать чтобы корректно отображалось?

#248244

Покажите вывод

text
$ ls -al .

в каталоге с проблемным каталогом ( подозреваю. что это ваш домашний каталог, тогда точку в команде выше нужно заменить на тильду "~". Разумеется, без кавычек. Еще могу посоветовать консольную утилиту convmv, но ее нужно использовать с осторожностью, внимательно прочитав ее ман...
PS. Вот, для общего развития: UFO: Полезные советы и скрипты, упрощающие работу в консоли
UPD: У меня сработал еще такой способ:

text
 $ find . -type f -ls

Моя версия find имеет багофичу (ну, или я чего-то еще не знаю): если используется формат вывода в стиле ls -l, то вместо неподдерживаемых find'ом символов выводятся числовые коды.
Далее, копируем эту строку цифр, выполняем

text
find . -name $( echo -ne "\последовательность\числовых\кодов" )  -exec mv -f {} newname \;

Далее, при желании удалить:

text
rm -Rf newname

Вуаля.

#248252

Они хотели зохавать ваш моск, но, судя по сообщению в этой теме, не всё у них удалось.

Главный совет -- читать. Много. Пока не поймёте сами, почему это происходит, и не станете способны объяснить соседскому мальчишке-дошкольнику с первого раза так, чтоб не переспрашивал.

Потом, на всякий ненормальный случай (впечатлительный иливнушаемый дошкольник), расскадите об изысканиях на форуме, и, если никто не заметит криминала, за ваш счёт и нна ваш страх и риск, в добрый путь.

#248253

yars
$ ls -al .
drwxrwxr-x 2 user user 4096 Jan 11 23:56 ???? ibanez s 470

#248271
"phant0m" написал:
Как от нее избавиться?
"phant0m" написал:
$ ls -al .
drwxrwxr-x  2 user user     4096 Jan 11 23:56 ???? ibanez s 470
text
$ rm -rf *470

если "ls -al ." вывел что-то ещё, кроме приведённого в посте, за последствия не отвечаю, ибо акын -- что вижу, то пою.

#248273
"bormant" написал:
ибо акын -- что вижу, то пою

Сегодня в ударе? :)

#248281

newzenon,
вижу вывод по "ls -al ." одного элемента, содержащего непечатаемые символы, оканчивающегося на "470" (литерально, не на \0470 или наподобие).
Предполагая минимальные повреждения, "rm -rf *470" является адекватным ответом на вопрос, как это удалить.
Если вдруг условия были ширше, то и к людям нужно мягше, на счёт чего дисклаймер приведён бымши. Надеюсь все понямши, а если не -- то хотя б учёмши.

#248284

bormant, та не про то, я про посты твои, сегодня второй раз веселишь... :)

#248287

Та я ваще негрустный ;) Просто академичности напускаю местами ;) а местами -- безалаберности ;)

ps.
И вкусы и запросы мои - странны,-
Я экзотичен, мягко говоря:
Могу одновременно грызть стаканы -
И Шиллера читать без словаря.

Во мне два Я - два полюса планеты,
Два разных человека, два врага:
Когда один стремится на балеты -
Другой стремится прямо на бега.
(q) ВСВ

#248296

Проблемные файлы (каталоги) можно удалять так:
— определить index number, т.е. inode для проблемного файла (первое поле в каждой строке):

text

ls -il

— удалить файл с данным inode:

text
find -inum N -delete

где N — число полученное с помощью первой команды.

#248316
bormant написал:
Они хотели зохавать ваш моск, но, судя по сообщению в этой теме, не всё у них удалось.

Главный совет -- читать. Много. Пока не поймёте сами, почему это происходит, и не станете способны объяснить соседскому мальчишке-дошкольнику с первого раза так, чтоб не переспрашивал.

Потом, на всякий ненормальный случай (впечатлительный иливнушаемый дошкольник), расскадите об изысканиях на форуме, и, если никто не заметит криминала, за ваш счёт и нна ваш страх и риск, в добрый путь.

А что не так?

#248370

Проблема скорее всего звучит как "неправильная кодировка при распаковке zip", хотя архиватор и не был назван. Есть ненулевая вероятность, что речь о другом архиваторе, тогда поправьте.

В текущем положении, когда уже распаковано в неправильной кодировке, скорее всего поможет convmv.

Чтобы не происходило подобного в будущем для infozip есть патчи, можно пропатчить исходники на предмет правильной работы с русскими именами файлов, и пересобрать unzip.

По поводу удаления, если каталог один, а именно это имелось в виду, когда выше говорил про страх и риск, поскольку в имени есть обычные символы, их можно использовать в качестве маски, которую bash сам раскроет в то, что нужно. Если вывод ls был приведён только частично, то есть в каталоге присутствуют и другие файлы/каталоги, содержащие использованную маску, -- это приведёт и к их удалению. Скорее всего, подобное поведение нежелательно, поэтому и оговорка. Перед выполнением rm по маске есть смысл предварительно выполнить ls с той же маской, чтобы убедиться, что не зацепили ничего лишнего.

Ну и удаление по inode -- тяжёлая артиллерия, выше уже показали, как с этим управляться.


ps. Ну а по поводу что во что перекодировать -- это на тот случай, если нужно срочно, а под рукой ничего из вышеперечисленного нет. Один iconv. Но и с ним можно получить желаемое. Например, наколенный и не самый оптимальный вариант:

text

#!/bin/bash

IFS=' ' if [ -r "$1" ]; then DIR=$(echo $1|rev|cut -d. -f2-|rev) if unzip -d "$DIR" "$1"; then for i in $(ls -1 "$DIR/"); do LANG=C mv "$DIR/$i" "$DIR/$(echo $i | iconv -f cp1252 -t cp850 | iconv -f cp866)" done fi fi

#248377
"bormant" написал:
Проблема скорее всего звучит как "неправильная кодировка при распаковке zip"

Такие ошибки бывают (обычно) если для распаковки использовался Gui-интерфейс, в консоли такого как правило не происходит.

#248389

А вот по поводу "багофичи" вопрос: может, я в мане проглядел, но, почему так? Нужно пересобрать find?

#248436

Ну развели вы тут. Хотелось бы избежать подобных пролем. Как заставить такие файлы (из винды) нормально отображаться? Имя архива уже имело неправильный вид, но он читался. А вот содержимое уже нет.

#248437

вывод ls пустите через iconv - посмотрите имя. А потом в rm подставьте через обратный iconv

#248554

Можно, если не ошибаюсь, не изменяя системной локали, сразу корректно открыть такой архив так:

text
$ LANG=ru_RU.CODEPAGE tar xvf archive.tar.bz2

Проблема в том, что нужно знать правильную CODEPAGE. Но, если это оффтопик, то, скорее всего, кодировка будет либо CP1251, либо UTF-8. Ну, и архиватор свой, естесственно. Насчет чтобы всегда было корректно, тут уже не угадаешь, какой архив попадется завтра. Но, в случае, когда с такими архивами нужно работать постоянно, и кодировка архива всегда известна, нужно выполнить локализацию для этой известной кодировки.

Войдите или зарегистрируйтесь, чтобы ответить.