условные выходные пропавшие без вести находки

Я пытаюсь создать условный оператор для поиска файлов определенного размера (в этом случае 1 ГБ.

if [ "find /location/sub/int/ -size +1G" ]
then
  > /location/sub/int/large_file_audit.txt
fi

Я выполняю это, и это создает файл, но файл пуст, как я могу заставить результаты находки заполнять в файл? что я делаю неправильно?

3
задан 19 January 2019 в 00:56

2 ответа

Ваш тест if [ "find /location/sub/int/ -size +1G" ] не работает способ, которым Вы предназначаете, потому что он тестирует непустоту строки "find /location/sub/int/ -size +1G" - который всегда будет верен. В любом случае, перенаправление > /location/sub/int/large_file_audit.txt волшебно не возьмет стандартный вывод предыдущей команды, так будет всегда создавать пустой файл.

Возможно, самое близкое к Вашему намерению в Bash должно было бы поместить результаты find в массив, и затем тестируют, имеет ли он какие-либо элементы:

mapfile -t files < <(find /location/sub/int/ -size +1G)

if (( ${#files[@] > 0 )); then 
  printf '%s\n' "${files[@]}" > /location/sub/int/large_file_audit.txt
fi

Это корректно не обработает имена файлов, содержащие новые строки - с более новыми версиями удара, Вы могли сделать find и mapfile разграниченный пустым указателем, но нет большого преимущества при выводе их как разграниченного новой строкой списка во всяком случае.

6
ответ дан 1 December 2019 в 13:08

Одно обходное решение лайнера:

find -size +10G | grep ".*" > file.log || (rm file.log; echo "Can't find anything")

Или:

find -size +10G | grep ".*" > file.log || rm file.log

Отметьте это find возвраты 1 (Ложь), когда файлы не обрабатываются правильно ни по какой причине, таким образом, я предлагаю использовать что-то как:

#!/bin/bash
RESULTS=$(find /path -size +1G)
if [ -n "$RESULTS" ];
 then
   echo "$RESULTS" > /path/file.log
fi

Первый показ find и помещенный результаты в переменную, затем если переменная содержала что-нибудь, сохраняют это в файл журнала.

4
ответ дан 1 December 2019 в 13:08

Другие вопросы по тегам:

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