【问题标题】:Print full filenames with spaces in shell with find command使用 find 命令在 shell 中打印带空格的完整文件名
【发布时间】:2014-09-24 07:16:31
【问题描述】:

我有一个查找命令,它将打印给定目录中 20 个最大文件的大小和文件名(以及完整路径)并将其写入文件:

find ${DIR}  -type f -size +1M -exec du -h '{}' + | sort -hr|awk '{print $1","$2}'|head -20 >>files.csv

问题是,有些文件的文件名中有空格。这些文件名只打印到第一个空格。

例如:名为“hello there.txt”的文件打印为“hello”

我尝试将 IFS 设置为 '\n',

i.e. IFS=$'\n',

但问题仍然存在。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: shell scripting find filenames spaces


    【解决方案1】:

    在awk 中,print $1","$2 打印用逗号分隔的前两个字段。问题是hello there.txt中的there.txt在第三列。

    看来awk 在这里唯一要做的就是用逗号替换第一个选项卡。这可以通过sed 轻松完成:

    $ find "${DIR}" -type f -size +1M -exec du -h '{}' + | sort -hr| sed 's/\t/,/' |head -20
    4.0M,./path/hello there.txt
    

    【讨论】:

    • 非常感谢您的回复。 awk 实际上是选择所需的 2 列并在它们之间添加一个逗号,因为 ls 列出了更多的值,而我不需要所有这些。
    猜你喜欢
    • 2010-09-09
    • 2015-09-29
    • 2023-02-22
    • 2016-05-13
    • 2012-03-01
    • 2017-05-29
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多