ls - ltr错误,因为文件夹中没有任何内容

时间:2015-08-20 07:35:42

标签: bash ls

我有一个脚本,在脚本中我正在运行以下命令。

ls -1tr ${ARCH1_DIR}/* | grep ${LOG_PREFIX} > $copied_binlog_set

如果文件夹为空我收到错误。

  

ls:无法访问/ n01 / mysqlarch1 / *:没有这样的文件或目录

此时脚本停止处理。有没有办法让脚本可以在文件夹为空时进行处理。

2 个答案:

答案 0 :(得分:0)

您可以尝试:

ls -1tr ${ARCH1_DIR}/* 2>/dev/null | grep ${LOG_PREFIX} > $copied_binlog_set

当您编写2> file时,它会将stderr重定向到file,但您可以使用null设备并抛出它获得的输入。您可以将其视为系统的黑洞。

答案 1 :(得分:0)

*由shell扩展,而不是ls命令。这意味着,如果没有文件,shell不会展开*ls会尝试显示名为 *的文件的列表。目标目录 - 不存在,因此出错。

您可以重定向错误消息(ls ... 2>/dev/null),并通过bash变量PIPESTATUS捕获错误条件:

if [ ${PIPESTATUS[0]} != 0 ]
then
    # whatever error handling your script needs at this point
    echo "ls failed!"
fi

PIPESTATUS允许检索管道链中任何命令的返回值($?)。 ($?只返回链中 last 命令的值)。 PIPESTATUS数组的索引是管道链中命令的索引。