2013-09-20 4 views
0

Я хочу сравнить выход хвоста -1, чтобы увидеть, является ли это пустой строкой. Например, если я ищу файл с find, и я хочу сравнить результат с «" (пустая строка), как это сделать? У меня есть:Если еще в xargs

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

В основном, это будет печатать имя файла, если он не пустой, и буду печатать «Пустой», если нет PDF файлов, найденных «найти».

Я пробовал несколько различных вариантов с использованием операторов if-else внутри одной команды, и ничего не работает.

ответ

1

Вам не нужно выводить трубы в tail, xargs, и так далее ...

Просто сказать:

(($(find . -name "*.pdf" | wc -l) == 0)) && echo "Empty" 
+0

Что делает wc -l? – reectrix

+0

@ user680936 Он вычисляет количество строк на выходе. – devnull

+0

Спасибо! Это хорошо работает – reectrix

0

Вы можете сделать скрипт:

#!/bin/bash 
output=$(find . -name *.pdf) 
if [ -z $output ]; then 
    echo "Empty" 
fi 
+0

Как я могу ввести это в контексте xargs? Это внутри bash -c? – reectrix

2

Попробуйте следующее:

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

Согласно man test -s проверит, равен ли размер файла нулю.

+0

По какой-то причине это ничего не выдавало для меня. Я думаю, это может быть потому, что он не делает сравнения в условии if. на что ссылается -s? и соответствует ли $ 0 имени файла? – reectrix

+0

Ах, извините, -s проверяет размер файла ... вы уже упомянули об этом. – reectrix

+0

Просто понял, что я думал, что вы хотите напечатать «Empty» для каждого файла pdf с пустым содержимым, а не печатать пустым, если нет файлов PDF. –

1

Вместо этого вы можете использовать функцию.

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

Вы можете поместить что в ~/.profile или ~/.bashrc. Запустите exec bash -l, чтобы перезагрузить свой bash и запустить find . -name "*.pdf" | tailx -1. Вы также можете настроить это, чтобы стать сценарием оболочки, размещенным /usr/local/bin вместо /usr/local/bin/tailx. Просто добавьте tailx "[email protected]" в конец скрипта и добавьте заголовок оболочки в начале.

#!/bin/bash 
... 
tailx "[email protected]" 
+0

Это действительно умно. благодаря! – reectrix

Смежные вопросы