1

我想比较 tail -1 的输出,看看它是否为空字符串。例如,如果我正在使用 find 搜索文件,并且想将结果与“”(空字符串)进行比较,我该怎么做?我有:

find . -name "*.pdf" | tail -1 | xargs -L1 bash -c 'if [$1 == ""] then echo "Empty"; else 
< echo $1; fi'

基本上,如果文件名不为空,它将打印出文件名,如果'find'没有找到pdf文件,它将打印“Empty”。

我尝试了许多不同的变体,在单个命令中使用 if-else 语句,但似乎没有任何效果。

4

5 回答 5

3

试试这个:

find . -name "*.pdf" | xargs -L1 bash -c 'if [ -s $0 ] ; then echo "$0"; else echo "File empty"; fi'

根据man test-s 会检查文件大小是否为零。

于 2013-09-20T05:11:36.290 回答
2

xargs您可以使用选项--no-run-if-empty

--no-run-if-empty

-r

如果标准输入不包含任何非空格,请不要运行该命令。通常,即使没有输入,该命令也会运行一次。此选项是 GNU 扩展。

我的用例示例:

find /iDontExist | xargs du -sc
# produce the command `du -sc` on the current directory
# that wasn't the initial aim

避免这种情况的一种方法:

find /iDontExist | xargs --no-run-if-empty du -sc

hth

于 2018-10-11T12:50:35.430 回答
1

您不需要将输出通过管道传输到tail,xargs等...

简单地说:

(( $(find . -name "*.pdf" | wc -l) == 0)) && echo "Empty"
于 2013-09-20T05:11:01.057 回答
1

您可以改用函数。

function tailx {
    if read -r LINE; then
        (
            echo "$LINE"
            while read -r LINE; do
                echo "$LINE"
            done
        ) | command tail "$@"
    else
        echo "Empty."
    fi
}

你可以把它放在~/.profileor中~/.bashrc。运行exec bash -l以重新加载您的 bash 并运行find . -name "*.pdf" | tailx -1. 您还可以将其自定义为放置的 shell/usr/local/bin脚本/usr/local/bin/tailx。只需tailx "$@"在脚本末尾添加,在开头添加 shell 标头即可。

#!/bin/bash
...
tailx "$@"
于 2013-09-20T05:12:52.530 回答
0

你可以写一个脚本:

#!/bin/bash
output=$(find . -name *.pdf)
if [ -z $output ]; then
    echo "Empty"
fi
于 2013-09-20T05:04:07.253 回答