【发布时间】:2013-11-30 15:10:10
【问题描述】:
我想遍历我的主文件夹并列出所有指向在其路径中包含 Dropbox 的元素的符号链接。以下命令(加上一些后期处理以删除额外的信息字段,但这应该不难)几乎完成了任务
ls -alR ~ | grep -e "->" | grep Dropbox
在我的ls 的输出中,标记-> 位于符号链接目标的路径之前。为了只获得指向 Dropbox 中某些内容的符号链接,我将输出传递给最终的 grep。但是有一个问题:这样我只得到符号链接的名称而不是它的完整路径。另一方面,使用如下命令:
ls -alR ~ | grep -e "->" | grep -E '(Dropbox|:)'
保留ls 的路径列表(在递归搜索中ls 首先输出列出的文件夹,后跟一个冒号)会导致太多的命中。有什么想法吗?
【问题讨论】:
-
如果您必须处理恶意文件名(例如,包含
->或换行符,有时甚至是空格和制表符的文件名),请注意解析ls输出的困难。 -
是的,这就是为什么您应该始终使用真正的编程语言(即不是 shell 脚本)来编写商业软件。但是对于一个快速的个人脚本,这可能没问题。
-
对了,不要有太恶意的文件,个人用。如何突出显示消息中的代码部分?我已经看到你为我做了,谢谢!
-
代码高亮——缩进(至少)4个空格。要快速执行此操作,请选择要缩进的代码,然后按编辑框上方的
{}按钮。 (有传言说 control-K 组合也可以;我没用过。) -
如果您想查看恶意文件,请尝试运行此脚本(在垃圾目录中 - 不是其中包含有价值数据的目录):
ls -la | while read -r line1 && read -r line2; do cp /dev/null $'\n'"$line1"$'\n'"$line2"; done。如果目录中有符号链接,它会“更好”工作。它几乎可以保证幼稚的 shell 脚本会严重失败。
标签: bash command-line ls