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]] -- > проверяет, имеет ли файл размер больше 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