【发布时间】:2018-07-21 21:14:19
【问题描述】:
我从用户的主目录运行它以显示最新的文件,同时省略 shell 配置文件:
find ./ -type f -printf "%T@ %p\n"|grep -vP "/\.(bash|emacs|gtkrc|kde/|zshrc)" |sort -n| tail -10|cut -f2- -d" "|while read EACH; do ls -l "$EACH"; done;
这可行,但在我的 .bashrc 作为别名放置时效果不佳:
alias recentfiles='find ./ -type f -printf "%T@ %p\n"|grep -vP "/\.\(bash|emacs|gtkrc|kde/|zshrc\)"|sort -n| tail -10|cut -f2- -d" "|while read EACH; do ls -l "$EACH"; done;'
在图像中,您会看到未进行任何过滤的结果,然后是使用grep -v 进行过滤的所需结果,该过滤可在命令行上运行。然后最终结果 - 仅部分成功地清除了这些文件。
我尝试过使用 bash_ 和 [b]ash。甚至 bas (甚至无法获得 .basin)都无法工作?!?而且我也可以使用macs或acs并且仍然省略.emacs,所以很明显我的别名中的语法不尊重/。任何一个。保留字不是我原先想的问题。
如果我将原始命令按原样放在文件中,然后以这种方式使用别名,我 DO 会得到预期的结果: 别名最近文件='。 /root/mycommands/recentfiles'
有人可以解释或指出一个参考来了解这里的作用吗?我不知道要搜索什么词组。
【问题讨论】:
-
你为什么不告诉
find过滤掉那些? -
使用函数代替 ;)
-
创建别名意味着 shell 会扫描该命令行并在单个和 dbl 引用的字符串上执行魔术。在通过处理激活它之后,很难理解 cmd 字符串处于什么“状态”(哪些引号和转义字符已被消耗,哪些仍然存在)。尝试修复别名真的不值得你花时间,更好地使用函数,它们是可调试的,它们可以接受运行时参数,而且你不必欺骗 shell 解析器来让它们工作。恕我直言,祝你好运。
-
在
find命令中使用! \( -name .bash -o -name .emacs -o ... \)而不是grep。 -
当您写“在图片中,您看到”时,我假设您尝试发布图片,但不知何故无法发布。没关系,反正直接复制粘贴终端输出会好很多。