У меня есть файл с именем diff.txt. Хотите проверить, пуст ли он. Сделал что-то подобное, но не смог заставить его работать.
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
У меня есть файл с именем diff.txt. Хотите проверить, пуст ли он. Сделал что-то подобное, но не смог заставить его работать.
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
Ошибки раздражают, не так ли? Проверьте правильность написания 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
Мне очень нравится использование сценариев оболочки, но один из недостатков этого заключается в том, что оболочка не может помочь вам, когда вы ошибаетесь, тогда как компилятор, такой как ваш компилятор С++, может вам помочь.
Обратите внимание, что я поменял роли 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 *.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
Многие из ответов верны, но я чувствую, что они могут быть более полными /упрощенный и т.д., например:
Пример 1. Базовый оператор if
# 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 пуст или нет, остановите показ с выходом. Я не раз неправильно читал верхний ответ, чтобы обозначить обратное.
Пример 2: как функция
# -- Check if file is missing /or empty --
# Globals: None
# Arguments: file name
# Returns: Bool
# --
is_file_empty_or_missing() {
[[ ! -f "${1}" || ! -s "${1}" ]] && return 0 || return 1
}
[[ -f filename && ! -s filename ]] && echo "filename exists and is empty"
Чтобы проверить, является ли файл пустым или имеет только пробелы, вы можете использовать grep:
if [[ -z $(grep '[^[:space:]]' $filename) ]] ; then
echo "Empty file"
...
fi
Я пришел сюда в поисках того, как удалить пустые файлы __init__.py
поскольку они неявны в Python 3. 3+, и в итоге использовал:
find -depth '(' -type f -name __init__.py ')' -print0 |
while IFS= read -d '' -r file; do if [[ ! -s $file ]]; then rm $file; fi; done
Также (по крайней мере, в zsh) использование $ path в качестве переменной также нарушает вашу среду $ PATH и, таким образом, разрушает вашу открытую оболочку. Во всяком случае, думал, что я поделюсь!