Чтобы узнать, существует ли пакет где-то в дереве каталогов, не нужно использовать 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
Я не знаю, о чем идет речь. Эскейп-персонажи мне подходят. Я бы просто выделил имя файла, и он добавил себе escape-символы.
rm -f \?\?\?E@X\?p@8\?@
Раньше, когда у меня был файл, начинающийся с -, я просто добавлял путь перед именем файла и цитировал имя файла, как показано ниже.
rm -f ./'--exlude=ssh'
for f in \`cat file_list\`
do
/bin/rm -i $f # option i to be extra safe
done
Поскольку вы знаете фактические символы, содержащиеся в имени, вам просто нужно построить правильную управляющую последовательность для имени файла, как описано вhttp://tldp.org/LDP/abs/html/escapingsection.html
Создание
$ 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éé : -
Удаление
$ rm -i $'\001\360\265E@X\342p@8\b@'
rm : supprimer fichier ''$'\001\360\265''E@X'$'\342''p@8'$'\b''@' ? y
$
В моем случае я получил такие забавные имена файлов, как это:
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@*
ура