Как проверить, пуст ли файл в Bash?
У меня есть файл под названием дифф.формат txt. Хотите проверить, если он пуст. Сделал что-то вроде этого, но не смог заставить его работать.
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
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 пуст или нет, остановите шоу с выходом. Не раз я неправильно истолковывал верхний ответ здесь, чтобы означать противоположное.