Проблема с директорией
Покажите вывод
$ ls -al . в каталоге с проблемным каталогом ( подозреваю. что это ваш домашний каталог, тогда точку в команде выше нужно заменить на тильду "~". Разумеется, без кавычек. Еще могу посоветовать консольную утилиту convmv, но ее нужно использовать с осторожностью, внимательно прочитав ее ман...
PS. Вот, для общего развития: UFO: Полезные советы и скрипты, упрощающие работу в консоли
UPD: У меня сработал еще такой способ:
$ find . -type f -ls Моя версия find имеет багофичу (ну, или я чего-то еще не знаю): если используется формат вывода в стиле ls -l, то вместо неподдерживаемых find'ом символов выводятся числовые коды.
Далее, копируем эту строку цифр, выполняем
find . -name $( echo -ne "\последовательность\числовых\кодов" ) -exec mv -f {} newname \;Далее, при желании удалить:
rm -Rf newnameВуаля.
Они хотели зохавать ваш моск, но, судя по сообщению в этой теме, не всё у них удалось.
Главный совет -- читать. Много. Пока не поймёте сами, почему это происходит, и не станете способны объяснить соседскому мальчишке-дошкольнику с первого раза так, чтоб не переспрашивал.
Потом, на всякий ненормальный случай (впечатлительный иливнушаемый дошкольник), расскадите об изысканиях на форуме, и, если никто не заметит криминала, за ваш счёт и нна ваш страх и риск, в добрый путь.
yars
$ ls -al .
drwxrwxr-x 2 user user 4096 Jan 11 23:56 ???? ibanez s 470
Как от нее избавиться?
$ ls -al .
drwxrwxr-x 2 user user 4096 Jan 11 23:56 ???? ibanez s 470
$ rm -rf *470если "ls -al ." вывел что-то ещё, кроме приведённого в посте, за последствия не отвечаю, ибо акын -- что вижу, то пою.
ибо акын -- что вижу, то пою
Сегодня в ударе? :)
newzenon,
вижу вывод по "ls -al ." одного элемента, содержащего непечатаемые символы, оканчивающегося на "470" (литерально, не на \0470 или наподобие).
Предполагая минимальные повреждения, "rm -rf *470" является адекватным ответом на вопрос, как это удалить.
Если вдруг условия были ширше, то и к людям нужно мягше, на счёт чего дисклаймер приведён бымши. Надеюсь все понямши, а если не -- то хотя б учёмши.
bormant, та не про то, я про посты твои, сегодня второй раз веселишь... :)
Та я ваще негрустный ;) Просто академичности напускаю местами ;) а местами -- безалаберности ;)
ps.
И вкусы и запросы мои - странны,-
Я экзотичен, мягко говоря:
Могу одновременно грызть стаканы -
И Шиллера читать без словаря.
Во мне два Я - два полюса планеты,
Два разных человека, два врага:
Когда один стремится на балеты -
Другой стремится прямо на бега.
(q) ВСВ
Проблемные файлы (каталоги) можно удалять так:
— определить index number, т.е. inode для проблемного файла (первое поле в каждой строке):
ls -il
— удалить файл с данным inode:
find -inum N -deleteгде N — число полученное с помощью первой команды.
Они хотели зохавать ваш моск, но, судя по сообщению в этой теме, не всё у них удалось.
Главный совет -- читать. Много. Пока не поймёте сами, почему это происходит, и не станете способны объяснить соседскому мальчишке-дошкольнику с первого раза так, чтоб не переспрашивал.
Потом, на всякий ненормальный случай (впечатлительный иливнушаемый дошкольник), расскадите об изысканиях на форуме, и, если никто не заметит криминала, за ваш счёт и нна ваш страх и риск, в добрый путь.
А что не так?
Проблема скорее всего звучит как "неправильная кодировка при распаковке zip", хотя архиватор и не был назван. Есть ненулевая вероятность, что речь о другом архиваторе, тогда поправьте.
В текущем положении, когда уже распаковано в неправильной кодировке, скорее всего поможет convmv.
Чтобы не происходило подобного в будущем для infozip есть патчи, можно пропатчить исходники на предмет правильной работы с русскими именами файлов, и пересобрать unzip.
По поводу удаления, если каталог один, а именно это имелось в виду, когда выше говорил про страх и риск, поскольку в имени есть обычные символы, их можно использовать в качестве маски, которую bash сам раскроет в то, что нужно. Если вывод ls был приведён только частично, то есть в каталоге присутствуют и другие файлы/каталоги, содержащие использованную маску, -- это приведёт и к их удалению. Скорее всего, подобное поведение нежелательно, поэтому и оговорка. Перед выполнением rm по маске есть смысл предварительно выполнить ls с той же маской, чтобы убедиться, что не зацепили ничего лишнего.
Ну и удаление по inode -- тяжёлая артиллерия, выше уже показали, как с этим управляться.
ps. Ну а по поводу что во что перекодировать -- это на тот случай, если нужно срочно, а под рукой ничего из вышеперечисленного нет. Один iconv. Но и с ним можно получить желаемое. Например, наколенный и не самый оптимальный вариант:
#!/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
Проблема скорее всего звучит как "неправильная кодировка при распаковке zip"
Такие ошибки бывают (обычно) если для распаковки использовался Gui-интерфейс, в консоли такого как правило не происходит.
А вот по поводу "багофичи" вопрос: может, я в мане проглядел, но, почему так? Нужно пересобрать find?
Ну развели вы тут. Хотелось бы избежать подобных пролем. Как заставить такие файлы (из винды) нормально отображаться? Имя архива уже имело неправильный вид, но он читался. А вот содержимое уже нет.
вывод ls пустите через iconv - посмотрите имя. А потом в rm подставьте через обратный iconv
Можно, если не ошибаюсь, не изменяя системной локали, сразу корректно открыть такой архив так:
$ LANG=ru_RU.CODEPAGE tar xvf archive.tar.bz2Проблема в том, что нужно знать правильную CODEPAGE. Но, если это оффтопик, то, скорее всего, кодировка будет либо CP1251, либо UTF-8. Ну, и архиватор свой, естесственно. Насчет чтобы всегда было корректно, тут уже не угадаешь, какой архив попадется завтра. Но, в случае, когда с такими архивами нужно работать постоянно, и кодировка архива всегда известна, нужно выполнить локализацию для этой известной кодировки.