2012-06-27 58 views
2

我想获得一个目录中的非目录文件的列表。 find命令正在运行,但maxdepth 1选项无效,可能是因为它在Aix上不受支持。如何获取Aix或Unix目录中的非目录文件列表?

此命令:

find . -maxdepth 1 -type f 

回报:

find: bad option -maxdepth 

我用这个命令:

ls -l | grep ^- | awk '{print $9}' 

但如果文件名包含空格,这是行不通的。有什么办法可以解决这个问题吗?

回答

1

去了你的最后一次尝试,这似乎好工作:

ls -l | grep ^- | awk '{for(i=1;i<9;i++) $i="";print}' | sed 's/^  //' 

有可能是一个更好的办法(!我挺希望有),但这样会合拢前八场,剩下八个空格和那么该行的其余部分(因此文件名中的空格可以),然后删除那些前导八个空格。

我宁愿削减到追逐这个bash的版本:

for f in *; do if [ -f "$f" ]; then echo "$f"; fi; done 

我敢肯定,你也可以自行调整使ksh(这我不熟悉)。

我仍然希望别人知道更直接的事情。

+0

这两种解决方案在ksh的工作,但如果我给在文件名称的多个连续的空格,这是行不通的;例如,如果文件名是“ABC(4位)d.txt”,那么它是显示结果为'abc d.txt' – user1484782

+0

如果我把$放在$ f的echo $ f中,代码的工作原理如下: for f in *;如果[-f“$ f”];然后回显“$ f”;网络连接;完成谢谢Darshan,我对这个for循环版本确定,但为了知识的缘故,如果我必须做同样的事情:ls -l | grep^- | awk'{for(i = 1; i <9; i ++)$ i =“”; print}'| sed's/^ //'可能吗? – user1484782

+0

@ user1484782 1)是的,谢谢你指出 - 那里肯定有引号。我已经更新了我的答案。 2)可能有一种方法来保存awk中的空间,但我无法正确地想到它。 shell版本更短,更直接地代表你正在做的事情,所以我会坚持。 3)欢迎来到堆栈溢出! 4)不要忘记选择我的答案作为您选择的答案。如果稍后有人出现更好的答案,您随时都可以更改。 –

0

这似乎适用于名称中包含多个空格的文件。将其减少到单个管道。
我个人喜欢寻找更优雅的东西。

ls -l | awk '/^-/ {for(i=9;i<=NF;i++){printf "%s ", $i}print "";}' 
相关问题