如何在查找输出中省略基本名称?

时间:2012-02-29 01:34:35

标签: bash

find . -maxdepth 1

如何从输出中省略./当前目录前缀?

还有什么方法ls由换行符分隔的输出 AND 只包含文件/目录名称字段(例如没有文件属性),就像这样

file1.txt
dir1
file2.txt
dir2

5 个答案:

答案 0 :(得分:5)

也许是这样的:

find . -maxdepth 1 -exec basename {} \;

basename完全符合您的要求,-exec会为每场比赛调用它。

答案 1 :(得分:2)

您可以使用ls -1ls获取所需的输出。来自ls(1) man page

   -1     list one file per line

-1的输出不是终端时,ls格式也是默认格式。

要从./剥离find,我只会这样做:

find . | cut -c 3-

答案 2 :(得分:1)

关于ls。如果您只想要没有属性的名称,可以使用-1开关,如

ls -1

因为ls经常在.bashrc.bash_profile中设置别名,所以在终端前面加上反斜杠\的命令以覆盖别名

\ls -1

答案 3 :(得分:0)

您可以使用sed(1)和awk(1)等工具任意后处理find的输出。这可能是实现总体目标的最简单方法。

例如,您可以使用

删除每行的前导部分

找到... | sed -e's /^.\///'

您可以类似地使用基于正则表达式的匹配来从文件名中拆分目录名称并将它们放在不同的行上。

答案 4 :(得分:0)

你可以做到

(cd path/to; find . -maxdepth 1 | cut -c 3- | tail -n+2)

可能相当于

ls -al1 path/to | tail -n+3

因为给定

mkdir lookhere
touch lookhere/{.a,b.file,c}

然后这个差异将是空的

diff <(cd lookhere; find . -maxdepth 1 | cut -c 3- | tail -n+2) <(ls -al1 lookhere/ | tail -n+3)

即。两者都产生输出

.a
b.file
c