【问题标题】:How to get a list of non-directory files in a directory in Aix or Unix?如何在 Aix 或 Unix 的目录中获取非目录文件的列表?
【发布时间】:2012-06-28 14:05:49
【问题描述】:

我想获取目录中的非目录文件列表。 find 命令有效,但 maxdepth 1 选项无效,可能是因为 Aix 不支持它。

这个命令:

find . -maxdepth 1 -type f  

返回:

find: bad option -maxdepth

我使用了这个命令:

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

但如果文件名包含空格,这将不起作用。有没有办法解决这个问题?

【问题讨论】:

    标签: ksh aix


    【解决方案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(我不熟悉)进行调整。

    我仍然希望其他人会知道更直接的事情。

    【讨论】:

    • 这两种解决方案都在 ksh 中工作,但如果我在文件名中给出多个连续空格,它就不起作用;例如,如果文件名是 'abc(4 个空格)d.txt' 那么结果显示为'abc d.txt'
    • 如果我在 echo $f 中将 "" 放在 $f 上,则代码有效:for f in *;如果 [ -f "$f" ];然后回显“$ f”;菲;完成谢谢 Darshan,我可以接受这个 for 循环版本,但为了知识,如果我必须做同样的事情:ls -l | grep ^- | awk '{for(i=1;i
    • @user1484782 1) 是的,感谢您指出这一点——肯定应该有引号。我已经更新了我的答案。 2)可能有一种方法可以保留 awk 中的空格,但我想不出它。 shell 版本更短,更直接地代表了你想要做的事情,所以我会坚持下去。 3) 欢迎来到堆栈溢出! 4)不要忘记选择我的答案作为您选择的答案。如果以后有人提出更好的答案,您可以随时更改。
    • 如果您使用了 Korn shell [[ 测试(而不是 Bourne shell [),那么您将不需要引号 - 这是 [[ 和 [ 之间的区别之一(但仍然需要引号围绕包含空格的文字)。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2012-09-22
      • 2019-11-08
      相关资源
      最近更新 更多