Удаление файла с непечатаемыми символами [duplicate]

Чтобы узнать, существует ли пакет где-то в дереве каталогов, не нужно использовать dpkg. find подойдет, вы проверяете существование файла - тот факт, что это файл .deb, практически не имеет значения.

например,

find /var/spool/apt-mirror/ -name 'astyle*.deb'

Если вы планируете делать это многократно для многих файлов, я бы рекомендовал перенаправить вывод find /var/spool/apt-mirror/ -type f в файл, а затем использовать grep для поиска в этом файле - это будет намного быстрее, чем запускать find один раз для каждого поиска.

Если пакет отсутствует в вашем зеркале (и он существует в хранилище, которое вы зеркалируете), проверьте конфигурацию apt-mirror и запустите apt-mirror снова.

Чтобы узнать, должен ли пакет быть в зеркале, grep для него в соответствующем Packages файле. Например, у меня есть зеркало архива zfsonlinux для jessie, поэтому если бы я хотел узнать, должен ли пакет spl быть в этом репозитории, я бы сделал что-то вроде:

# grep 'Package: spl$' /var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie/main/binary-amd64/Packages
Package: spl

или

# find /var/spool/apt-mirror/mirror/archive.zfsonlinux.org/ -name 'Packages' -exec grep 'Package:\ spl$' {} +
/var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie-daily/main/binary-amd64/Packages:Package: spl
/var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie/main/binary-amd64/Packages:Package: spl
4
13.04.2017, 15:36
4 ответа

Я не знаю, о чем идет речь. Эскейп-персонажи мне подходят. Я бы просто выделил имя файла, и он добавил себе escape-символы.

rm -f \?\?\?E@X\?p@8\?@

Раньше, когда у меня был файл, начинающийся с -, я просто добавлял путь перед именем файла и цитировал имя файла, как показано ниже.

rm -f ./'--exlude=ssh'
-1
27.01.2020, 20:55
  • перечислите все файлы в каталоге и сохраните имена в file_list
  • отредактируйте file_list, удалив все файлы, кроме тех, которые нужно удалить

for f in \`cat file_list\` 
do
   /bin/rm  -i  $f   # option i to be extra safe 
done 
0
27.01.2020, 20:55

Поскольку вы знаете фактические символы, содержащиеся в имени, вам просто нужно построить правильную управляющую последовательность для имени файла, как описано вhttp://tldp.org/LDP/abs/html/escapingsection.html

  1. Создание

    $ echo test > $'\001\360\265E@X\342p@8\b@'
    $ stat $'\001\360\265E@X\342p@8\b@'
      Fichier : ''$'\001\360\265''E@X'$'\342''p@8'$'\b''@'
       Taille : 5           Blocs : 8          Blocs d'E/S : 4096       fichier
    Périphérique : 10302h/66306d    Inœud : 6948089     Liens : 1
    Accès : (0640/-rw-r-----)  UID : ( 1001/username)   GID : (                                 1003/jrousseau)
    Accès : 2018-06-20 11:40:44.333208199 +0200
    Modif. : 2018-06-20 11:40:47.589113454 +0200
    Changt : 2018-06-20 11:40:47.589113454 +0200
      Créé : -
    
  2. Удаление

    $ rm -i $'\001\360\265E@X\342p@8\b@'
    rm : supprimer fichier ''$'\001\360\265''E@X'$'\342''p@8'$'\b''@' ? y
    $
    
2
27.01.2020, 20:55

В моем случае я получил такие забавные имена файлов, как это:

ls -l
-rw-rw-r--  1 user user       0 oct  3 00:13 ''$'\345''@'$'\340\300\345''P'$'\347\340\345'

По сути, это тот же «тип» забавного имени файла, что и у вас. Это просто другое представление.

Добавление пути и вкладки приводит к:

ls -l./
�@���P���

Обратите внимание, в этом имени файла девять символов.

Каждый непечатаемый символ -начинается с '$' и заканчивается ' . Таким образом, '$' — это escape-последовательность, за которой следует один или несколько непечатаемых символов -и заканчивается ' .

Все это окружено '.

статистика говорит нам:

  File: �@���P���
  Size: 0              Blocks: 0          EA Block: 4096   regular empty file
Device: fd01h/64769d     Inode: 13631791    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/user)   Gid: ( 1001/user)
Access: 2018-10-03 00:13:20.799957386 +0200
Modify: 2018-10-03 00:13:20.799957386 +0200
Change: 2018-10-03 00:13:20.799957386 +0200
 Birth: -

Мы можем удалить этот файл с:

rm./?@*

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

rm./???E@*

ура

-1
27.01.2020, 20:55

Теги

Похожие вопросы