Как проверить, пуст ли файл в Bash?



У меня есть файл с именем diff.формат txt. Хотите проверить, если он пуст. Сделал что-то вроде этого, но не смог заставить его работать.



if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
775   6  

6 ответов:

опечатки раздражают, не так ли? Проверьте правильность написания empty, но затем также попробуйте это:

#!/bin/bash -e

if [ -s diff.txt ]
then
        rm -f empty.txt
        touch full.txt
else
        rm -f full.txt
        touch empty.txt
fi

мне очень нравится сценарий оболочки, но один из его недостатков заключается в том, что оболочка не может помочь вам, когда вы ошибаетесь, тогда как компилятор, такой как ваш компилятор C++, может вам помочь.

Кстати заметьте, что я поменялся ролями empty.txt и full.txt, как предлагает @Matthias.

[ -s file.name ] || echo "file is empty"

[[- s file]] -- > проверяет, имеет ли файл размер больше 0

if [[ -s diff.txt ]]; then echo "file has something"; else echo "file is empty"; fi

при необходимости, проверяет все *.txt файлы в текущем каталоге; и сообщает все пустые файлы:

for file in $(ls *.txt); do if [[ ! -s $file ]]; then echo $file; fi; done

В то время как другие ответы верны, используя "-s" опция также покажет, что файл пуст, даже если файл не существует.
Добавив эту дополнительную проверку "-f" чтобы увидеть, если файл существует в первую очередь, мы гарантируем, что результат правильный.

if [ -f diff.txt ]
then
  if [ -s diff.txt ]
  then
    rm -f empty.txt
    touch full.txt
  else
    rm -f full.txt
    touch empty.txt
  fi
else
  echo "File diff.txt does not exist"
fi

@geedoubleya ответ мой любимый.

однако, я предпочитаю этот

if [[ -f diff.txt && -s diff.txt ]]
then
  rm -f empty.txt
  touch full.txt
elif [[ -f diff.txt && ! -s diff.txt ]]
then
  rm -f full.txt
  touch empty.txt
else
  echo "File diff.txt does not exist"
fi

многие ответы верны, но я чувствую, что они могут быть более полными / упрощенно и т. д. например :

# BASH4+ example on Linux :

typeset read_file="/tmp/some-file.txt"
if [ ! -s "${read_file}" ]  || [ ! -f "${read_file}" ] ;then
    echo "Error: file (${read_file}) not found.. "
    exit 7
fi

если $read_file пуст или нет, остановите шоу с выходом. Не раз я неправильно понимал верхний ответ здесь, чтобы означать обратное.

Comments

    Ничего не найдено.