Проверка размера и удаление файла с помощью сценария оболочки

В вашем скрипте просто сделайте его переменной с быстрой проверкой работоспособности:

pyfile="file.py"
sudo PYSPARK_DRIVER_PYTHON=/bin/python2.7 PYSPARK_PYTHON=/bin/python2.7 SPARK_CONF_DIR=/configuration/spark2 /spark2.1/bin/spark-submit --driver-memory 2g --executor-memory 4g --num-executors 100 --jars /lib/json-serde-1.3.7-jar-with-dependencies.jar "${pyfile?python script not specified}"

Конструкция ${var?message}выдаст ошибку и отобразит message, если переменная varне определена или пуста.

Вы также можете указать значение по умолчанию, используя ${var-defaultvalue}.

Вы также можете сделать это функцией для более простого вызова:

runjob() {
    sudo PYSPARK_DRIVER_PYTHON=/bin/python2.7 PYSPARK_PYTHON=/bin/python2.7 SPARK_CONF_DIR=/configuration/spark2 /spark2.1/bin/spark-submit --driver-memory 2g --executor-memory 4g --num-executors 100 --jars /lib/json-serde-1.3.7-jar-with-dependencies.jar "${1?python script not specified}"
}

runjob "/path/to/file.py"
runjob "/path/to/some/other/file.py"
0
18.04.2020, 19:05
2 ответа

Команда wc -lподсчитывает строки файлов. Это может быть строительным блоком:

lineCount=$(<$fileName wc -l)

if [ $lineCount -eq 0 ]; then
  echo "File $fileName has no content"
fi
0
19.03.2021, 02:27

Предполагая, что вы хотите найти пустые файлы в текущем каталоге и ниже, запишите их пути в текстовый файл с именем empty.txt, а затем удалите их:

find. ! -path./empty.txt -type f -empty -print -delete >empty.txt

Предполагается, что у вас есть findреализация, которая понимает не -стандартные опции -emptyи -delete. Команда избегает удаления файла empty.txt, в который мы записываемся, и в противном случае найдет и удалит пустые обычные файлы, выводя их пути в файл empty.txt.

Вы можете выполнить приведенную выше команду без каких-либо действий после -print, чтобы увидеть, что будет удалено.

Для варианта, соответствующего стандарту -:

find. ! -path./empty.txt -type f -exec sh -c '
    for pathname do
        if [ ! -s "$pathname" ]; then
            printf "%s\n" "$pathname"
            rm -f "$pathname"
        fi
    done' sh {} + >empty.txt

Это вызывает короткий -строковый сценарий оболочки для пакетов найденных файлов. Сценарий проверяет каждое имя пути с помощью теста -s, чтобы определить, пуст он или нет, и если это (, то тест -sравен истине , если он не -пуст, вот почему мы отрицаем тест ), путь к файлу распечатывается и файл удаляется с помощью rm -f.

Как и раньше, вывод сохраняется в empty.txt.

Более короткая, но менее эффективная стандартная версия будет

find. ! -path./empty.txt -type f \
    ! -exec test -s {} \; -print -exec rm -f {} + >empty.txt

Это менее эффективно, так как внешняя команда testвыполняется один раз для каждого файла.

0
19.03.2021, 02:27

Теги

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