Удалить файлы, содержащие только одну строку? [дубликат]

-1
20.09.2018, 18:06
1 ответ

Количество строк в файле с именем MyFile.csvможно получить с помощью wc -l <MyFile.csv. Этот номер можно сравнить с 1и удалить файл с помощью

.
if [ "$( wc -l <MyFile.csv )" -eq 1 ]; then
    rm -i MyFile.csv
fi

$(...)— это подстановка команды, которая будет заменена выводом команды внутри. Параметр -iдля rmзаставляет утилиту запрашивать подтверждение перед удалением чего-либо.

Чтобы распространить это на все файлы CSV в текущем каталоге:

for filename in./*.csv; do
    if [ "$( wc -l <"$filename" )" -eq 1 ]; then
        rm -i "$filename"
    fi
done

Для дальнейшего обобщения на все файлы CSV в текущем каталоге или в любом месте ниже в любом подкаталоге:

find. -type f -name '*.csv' -exec sh -c '
    for pathname do
        if [ "$( wc -l <"$pathname" )" -eq 1 ]; then
            rm -i "$pathname"
        fi
    done' {} +

Всегда делайте резервную копию данных, особенно если вы собираетесь протестировать удаление файлов по сценарию.

1
28.01.2020, 05:09

Теги

Похожие вопросы