Как вы можете видеть ниже, файлы имеют необычные символы.
Удаление их либо в терминале, либо Dolphin возвращает ошибку:
Нет такого файла или каталогЗапуск ls -la в каталоге дал мне этот вывод:
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ?2?.???љ?!?Gb??σ?[?F?
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 3l??#g?w????O?JKB7?co??քH??bT?NA???S???X?I?A?qC??M?I???
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??8??-?@,?Zp?[?bI????7^?ñ[?ڏ??z?O???ч??eEȰ?+??,OF??h
Я запустил команду fsck в разделе из другой ОС, но он не изменился ничего.
Как удалить эти файлы?
Простым способом было бы удалить эти файлы с помощью inode. :)
Используйте ls -li в каталоге с необычными символами, чтобы показать номер inode каждого файла, например
$ ls -li
total 0
133370 -rw-r--r-- 1 malte malte 0 Dec 30 19:00 ?2?.???љ?!?Gb??σ?[?F?
132584 -rw-r--r-- 1 malte malte 0 Dec 30 18:59 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
Затем используйте утилиту find для удалите соответствующий файл по его имени, используя синтаксис find <somepath> -inum <inode_number> -exec rm -i {} \;, как в следующем примере:
$ find . -inum 133370 -exec rm -i {} \;
rm: remove regular empty file ‘./?2?.???љ?!?Gb??σ?[?F?’? y
$ ls -li
total 0
132584 -rw-r--r-- 1 malte malte 0 Dec 30 18:59 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
Опция -i для rm не нужна, я просто добавил ее в не позволяйте случайно удалять файлы, которые вы не хотели удалить. :) Это приводит к тому, что rm запрашивает подтверждение для каждого файла, который вы хотите удалить.
Если вы хотите удалить несколько файлов с помощью своих inodes, вы можете использовать синтаксис -o (значение или) для find:
$ find . \( -inum 133370 -o -inum 132584 \) -exec rm -i {} \;
rm: remove regular empty file ‘./?2?.???љ?!?Gb??σ?[?F?’? y
rm: remove regular empty file ‘./??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??’? y
Вы можете добавить больше номеров inode, расширив выражение в круглых скобках с помощью выражений -o -inum <inode_number>.
Простым способом было бы удалить эти файлы с помощью inode. :)
Используйте ls -li в каталоге с необычными символами, чтобы показать номер inode каждого файла, например
$ ls -li
total 0
133370 -rw-r--r-- 1 malte malte 0 Dec 30 19:00 ?2?.???љ?!?Gb??σ?[?F?
132584 -rw-r--r-- 1 malte malte 0 Dec 30 18:59 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
Затем используйте утилиту find для удалите соответствующий файл по его имени, используя синтаксис find <somepath> -inum <inode_number> -exec rm -i {} \;, как в следующем примере:
$ find . -inum 133370 -exec rm -i {} \;
rm: remove regular empty file ‘./?2?.???љ?!?Gb??σ?[?F?’? y
$ ls -li
total 0
132584 -rw-r--r-- 1 malte malte 0 Dec 30 18:59 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
Опция -i для rm не нужна, я просто добавил ее в не позволяйте случайно удалять файлы, которые вы не хотели удалить. :) Это приводит к тому, что rm запрашивает подтверждение для каждого файла, который вы хотите удалить.
Если вы хотите удалить несколько файлов с помощью своих inodes, вы можете использовать синтаксис -o (значение или) для find:
$ find . \( -inum 133370 -o -inum 132584 \) -exec rm -i {} \;
rm: remove regular empty file ‘./?2?.???љ?!?Gb??σ?[?F?’? y
rm: remove regular empty file ‘./??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??’? y
Вы можете добавить больше номеров inode, расширив выражение в круглых скобках с помощью выражений -o -inum <inode_number>.
Простым способом было бы удалить эти файлы с помощью inode. :)
Используйте ls -li в каталоге с необычными символами, чтобы показать номер inode каждого файла, например
$ ls -li
total 0
133370 -rw-r--r-- 1 malte malte 0 Dec 30 19:00 ?2?.???љ?!?Gb??σ?[?F?
132584 -rw-r--r-- 1 malte malte 0 Dec 30 18:59 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
Затем используйте утилиту find для удалите соответствующий файл по его имени, используя синтаксис find <somepath> -inum <inode_number> -exec rm -i {} \;, как в следующем примере:
$ find . -inum 133370 -exec rm -i {} \;
rm: remove regular empty file ‘./?2?.???љ?!?Gb??σ?[?F?’? y
$ ls -li
total 0
132584 -rw-r--r-- 1 malte malte 0 Dec 30 18:59 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
Опция -i для rm не нужна, я просто добавил ее в не позволяйте случайно удалять файлы, которые вы не хотели удалить. :) Это приводит к тому, что rm запрашивает подтверждение для каждого файла, который вы хотите удалить.
Если вы хотите удалить несколько файлов с помощью своих inodes, вы можете использовать синтаксис -o (значение или) для find:
$ find . \( -inum 133370 -o -inum 132584 \) -exec rm -i {} \;
rm: remove regular empty file ‘./?2?.???љ?!?Gb??σ?[?F?’? y
rm: remove regular empty file ‘./??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??’? y
Вы можете добавить больше номеров inode, расширив выражение в круглых скобках с помощью выражений -o -inum <inode_number>.
Важно понимать, что это не относится к «повреждению файловой системы», с которым поможет fsck. Что касается файловой системы, имена файлов могут быть любой последовательностью байтов, если ни один байт не имеет значения 0x00 (ASCII NUL, C концевой маркер) или 0x2F (/, разделитель каталога) , (Если имя файла каким-то образом получает байт 00 или 2F, встроенный в него, fsck должен исправить это.)
Скорее, у вас есть имена файлов, которые прикладное программное обеспечение (Dolphin, ls) думаю, содержат символы, которые не в вашем «локали», поэтому заменяют их символами-заполнителями. Вы также не можете вводить эти символы, поэтому манипулирование файлами сложнее, но вы можете сделать это до тех пор, пока вы это сделаете, не набирая и не копируя и не вставляя имя. Например, если вы удаляете или переименовываете файлы проблем непосредственно из Dolphin, это должно просто работать (я бы зашел так далеко, чтобы сказать, что если это не сработает, это ошибка в Dolphin).
[d6 ] Если вам нужно что-то сделать с оболочкой (например, если они принадлежат root и поэтому не могут быть изменены программой GUI), вы можете косвенно назвать их с помощью шаблонов «glob», которые будут расширены на правильную последовательность (байты) байтов.Теперь, конечно, вы не захотите удалять вещи случайно, потому что ваш шаблон glob слишком сильно соответствует, поэтому моя рекомендация будет заключаться в использовании утилита Perl rename для преобразования каждого имени файла в его шестнадцатеричное кодирование:
$ rename '$_ = unpack("H*", $_)' *
Это не уничтожает никакой информации - ни сам файл, ни какой-либо смысл первоначально не был закодирован в имени файла перед он искалечен. Его можно отменить для определенных файлов, например,
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Внимание: существует две программы с именем rename, из разных источников; приведенные выше команды будут работать только с тем, что происходит с Perl. В Ubuntu, который вы хотите, это тот, который вы хотите получить от пакета «rename», а не из пакета «util-linux». rename -h будет различать: это то, что вы хотите ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... это не то, что вы хотите ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
Ключ к искать - «perlexpr». У вас может быть более старая версия переименования Perl, которая не понимает всех вышеперечисленных параметров, но команда, которую я показал, все равно должна работать.
Изменить: под 14.04 .5 скрипт perl, который включен для [ f13] не поддерживает переключатель -h. Вы можете подтвердить, что у вас есть правильный, проверив его man-страницу с man rename, в этом случае верхняя строка будет содержать:
RENAME (1) Справочник программистов Perl RENAME (1)Важно понимать, что это не относится к «повреждению файловой системы», с которым поможет fsck. Что касается файловой системы, имена файлов могут быть любой последовательностью байтов, если ни один байт не имеет значения 0x00 (ASCII NUL, C концевой маркер) или 0x2F (/, разделитель каталога) , (Если имя файла каким-то образом получает байт 00 или 2F, встроенный в него, fsck должен исправить это.)
Скорее, у вас есть имена файлов, которые прикладное программное обеспечение (Dolphin, ls) думаю, содержат символы, которые не в вашем «локали», поэтому заменяют их символами-заполнителями. Вы также не можете вводить эти символы, поэтому манипулирование файлами сложнее, но вы можете сделать это до тех пор, пока вы это сделаете, не набирая и не копируя и не вставляя имя. Например, если вы удаляете или переименовываете файлы проблем непосредственно из Dolphin, это должно просто работать (я бы зашел так далеко, чтобы сказать, что если это не сработает, это ошибка в Dolphin).
Если вам нужно что-то сделать с оболочкой (например, если они принадлежат root и поэтому не могут быть изменены программой GUI), вы можете косвенно назвать их с помощью шаблонов «glob», которые будут расширены на правильную последовательность (байты) байтов.
Теперь, конечно, вы не захотите удалять вещи случайно, потому что ваш шаблон glob слишком сильно соответствует, поэтому моя рекомендация будет заключаться в использовании утилита Perl rename для преобразования каждого имени файла в его шестнадцатеричное кодирование:
$ rename '$_ = unpack("H*", $_)' *
Это не уничтожает никакой информации - ни сам файл, ни какой-либо смысл первоначально не был закодирован в имени файла перед он искалечен. Его можно отменить для определенных файлов, например,
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Внимание: существует две программы с именем rename, из разных источников; приведенные выше команды будут работать только с тем, что происходит с Perl. В Ubuntu, который вы хотите, это тот, который вы хотите получить от пакета «rename», а не из пакета «util-linux». rename -h будет различать: это то, что вы хотите ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... это не то, что вы хотите ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
Ключ к искать - «perlexpr». У вас может быть более старая версия переименования Perl, которая не понимает всех вышеперечисленных параметров, но команда, которую я показал, все равно должна работать.
Изменить: под 14.04 .5 скрипт perl, который включен для rename не поддерживает переключатель -h. Вы можете подтвердить, что у вас есть правильный, проверив его man-страницу с man rename, в этом случае верхняя строка будет содержать:
RENAME (1) Справочник программистов Perl RENAME (1)Важно понимать, что это не относится к «повреждению файловой системы», с которым поможет fsck. Что касается файловой системы, имена файлов могут быть любой последовательностью байтов, если ни один байт не имеет значения 0x00 (ASCII NUL, C концевой маркер) или 0x2F (/, разделитель каталога) , (Если имя файла каким-то образом получает байт 00 или 2F, встроенный в него, fsck должен исправить это.)
Скорее, у вас есть имена файлов, которые прикладное программное обеспечение (Dolphin, ls) думаю, содержат символы, которые не в вашем «локали», поэтому заменяют их символами-заполнителями. Вы также не можете вводить эти символы, поэтому манипулирование файлами сложнее, но вы можете сделать это до тех пор, пока вы это сделаете, не набирая и не копируя и не вставляя имя. Например, если вы удаляете или переименовываете файлы проблем непосредственно из Dolphin, это должно просто работать (я бы зашел так далеко, чтобы сказать, что если это не сработает, это ошибка в Dolphin).
Если вам нужно что-то сделать с оболочкой (например, если они принадлежат root и поэтому не могут быть изменены программой GUI), вы можете косвенно назвать их с помощью шаблонов «glob», которые будут расширены на правильную последовательность (байты) байтов.
Теперь, конечно, вы не захотите удалять вещи случайно, потому что ваш шаблон glob слишком сильно соответствует, поэтому моя рекомендация будет заключаться в использовании утилита Perl rename для преобразования каждого имени файла в его шестнадцатеричное кодирование:
$ rename '$_ = unpack("H*", $_)' *
Это не уничтожает никакой информации - ни сам файл, ни какой-либо смысл первоначально не был закодирован в имени файла перед он искалечен. Его можно отменить для определенных файлов, например,
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Внимание: существует две программы с именем rename, из разных источников; приведенные выше команды будут работать только с тем, что происходит с Perl. В Ubuntu, который вы хотите, это тот, который вы хотите получить от пакета «rename», а не из пакета «util-linux». rename -h будет различать: это то, что вы хотите ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... это не то, что вы хотите ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
Ключ к искать - «perlexpr». У вас может быть более старая версия переименования Perl, которая не понимает всех вышеперечисленных параметров, но команда, которую я показал, все равно должна работать.
Изменить: под 14.04 .5 скрипт perl, который включен для rename не поддерживает переключатель -h. Вы можете подтвердить, что у вас есть правильный, проверив его man-страницу с man rename, в этом случае верхняя строка будет содержать:
RENAME (1) Справочник программистов Perl RENAME (1)