Заставьте grep не менять шаблон - PullRequest
0 голосов
/ 25 марта 2020

Я делаю это: file $(ls -td -1 /usr/bin/* | grep zip), но вывод:

/usr/bin/preunzip:     cannot open `/usr/bin/preun\033[01;31m\033[Kzip\033[m\033[K' (No such file or directory)
/usr/bin/prezip:       cannot open `/usr/bin/pre\033[01;31m\033[Kzip\033[m\033[K' (No such file or directory)
...
...

Как можно видеть, после передачи в grep имя файла изменяется на некоторый tra sh (033[01;31...), и, таким образом, команда file не может открыть этот тра sh. Как сделать, чтобы grep (после передачи по каналу) не менял шаблон (имена файлов в моем случае), который будет использоваться для другой команды?

PS: без grep, он обычно работает: file $(ls -td -1 /usr/bin/*):

/usr/bin/js:                                 symbolic link to /etc/alternatives/js
/usr/bin/git:                                ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=f400072e5b2d2e09190d4258071d7502497aa5e3, for GNU/Linux 3.2.0, stripped

Таким образом, grep вызывает проблему здесь

1 Ответ

0 голосов
/ 25 марта 2020

Похоже, вы хотите запустить file на всех файлах под /usr/bin, которые имеют zip в именах, в порядке времени модификации?

file $(find /usr/bin -name "*zip*" -printf "%T@\t%p\n" | sort -t$'\t' -k1,1nr | cut -f2)

сделает это без большинства опасности, связанные с использованием ls вывода в сценарии .

Если по какой-то причине у вас есть файл с символом (пробелами) в имени в этом дереве каталогов:

find /usr/bin -name "*zip*" -printf "%T@\t%p\0" | sort -zt$'\t' -k1,1nr | cut -zf2- | xargs -0 file

(Все это предполагает использование утилит GNU)

Если вам не нужен порядок:

find /usr/bin -name "*zip*" -exec file '{}' +
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...