bash - 使 grep 不改变模式
问题描述
我这样做:
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 后,文件名更改为某个垃圾 ( 033[01;31...
),因此该file
命令无法打开该垃圾。如何使 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
问题的原因就在这里
解决方案
看起来您想按修改时间的顺序在其名称下的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 '{}' +
推荐阅读
- python - Biopython Entrez efetch
- sql - 在 ROW_NUMBER 上使用 INNER JOIN 在 SQL 查询中添加条件
- javascript - 根据用户输入动态创建和覆盖变量
- php - 如何在 laravel 和 RollbarNotifier 中发送邮件
- python - 使用 Coo-matrix 创建邻接矩阵的内存问题
- oracle - 如何在 apex oracle 中创建 RESTful
- swift - NSTableView 从底部开始单元格
- php - 使用 PHP 解析 DOCX document.xml 时如何获取超链接标签的位置?
- ios - 右 UIBarButtonItem 在 navigationBar 上显示一条垂直线
- google-app-engine - 如何在数据存储中定义 Key 类型?