Mam plik o nazwie diff.txt. Chcesz sprawdzić, czy jest pusty. Zrobiłem coś takiego, ale nie mogłem tego uruchomić.
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
Mam plik o nazwie diff.txt. Chcesz sprawdzić, czy jest pusty. Zrobiłem coś takiego, ale nie mogłem tego uruchomić.
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
diff
połączenie, po prostu sprawdź wartość zwrotu:if diff foo.txt bar.txt; then echo 'No difference'
if [ ! -s diff.txt ]; then echo "IS EMPTY";else echo "HAS SOMETHING";fi
$ cat diff.txt | hexdump -C
Odpowiedzi:
Błędy w pisowni są irytujące, prawda? Sprawdź pisownię
empty
, ale spróbuj także:Bardzo lubię pisać w skryptach powłoki, ale jedną wadą jest to, że powłoka nie może ci pomóc, gdy piszesz źle, podczas gdy kompilator taki jak kompilator C ++ może ci pomóc.
Zauważ, nawiasem mówiąc, że zamieniłem się rolami
empty.txt
ifull.txt
, jak sugeruje @Matthias.źródło
empty=empty.txt; full=full.txt; diff=diff.txt; if [ -s ${diff?} ]; then r=${empty?} t=${full?}; else r=${full?} t=${empty?}; fi; rm ${r?}; touch ${t?}
set -u
źródło
[[ -s file.name ]] || { [[ -f file.name ]] && echo 'empty' || echo 'does not exist'; }
[[-s plik]] -> Sprawdza, czy plik ma rozmiar większy niż 0
W razie potrzeby sprawdzane są wszystkie pliki * .txt w bieżącym katalogu; i zgłasza cały pusty plik:
źródło
$(ls *.txt
, a właściwie nie powinieneś. Niektóre osoby mają ustawione wartości domyślne,ls
które używają długiego formatu (jak ja), a powłoka sama się już rozszerza*.txt
. Po prostu zrób tofor file in *.txt
zamiast tego.find
tego w następujący sposób:for file in $(find . -name '*.txt'); do if [[ ! -s $file ]]; then echo $file; fi; done
for file in $(ls *.txt); do
.for file in *.txt; do
Zamiast tego użyj ; przeczytaj tę stronę Bash Pitfalls ; i proszę, przestańcie rozprzestrzeniać takie anty-wzory.Podczas gdy inne odpowiedzi są poprawne, użycie tej
"-s"
opcji spowoduje również, że plik jest pusty, nawet jeśli plik nie istnieje.Dodając tę dodatkową kontrolę,
"-f"
aby sprawdzić, czy plik istnieje jako pierwszy, upewniamy się, że wynik jest poprawny.źródło
Odpowiedź @geedoubleya jest moją ulubioną.
Jednak wolę to
źródło
Aby sprawdzić, czy plik jest pusty lub ma tylko białe znaki , możesz użyć grep:
źródło
-s
nie odpowiada na pytanie. Wyszukuje plik, który istnieje i ma rozmiar większy niż 0 bajtów.Wiele odpowiedzi jest poprawnych, ale wydaje mi się, że mogą być bardziej kompletne / uproszczone itp. Na przykład:
Przykład 1: Podstawowa instrukcja if
jeśli $ read_file jest pusty lub nie, zatrzymaj pokaz z wyjściem. Niejednokrotnie źle odczytałem tutaj najważniejszą odpowiedź, która oznaczała coś wręcz przeciwnego.
Przykład 2: Jako funkcja
źródło
źródło
Przybyłem tutaj, aby usunąć puste
__init__.py
pliki, ponieważ są one niejawne w Pythonie 3.3+, i skończyłem na użyciu:Również (przynajmniej w zsh) użycie $ path, ponieważ zmienna również psuje env $ PATH, a zatem rozbije twoją otwartą powłokę. W każdym razie, pomyślałem, że podzielę się!
źródło
Najłatwiejszy sposób sprawdzenia pliku jest pusty lub nie:
Możesz także napisać to w jednym wierszu:
źródło