Я ищу bash-скрипт (или однострочник) для выполнения следующих задач:

  1. Проверьте, не существует ли более одного файла, содержащего подстроку «slurm-»
  2. Если это так, удалите все файлы, содержащие подстроку, кроме самой новой

Любая помощь будет принята с благодарностью, спасибо.

1
L L 24 Апр 2017 в 20:59

2 ответа

Лучший ответ

Вышеуказанное не является исключительно эффективным с очень длинным списком файлов, но (1) это быстро с коротким списком (низкая стоимость запуска при постоянном времени), и (2) это очень ясно о том, как это работает (легко читается и понять).

shopt -s nullglob
candidates=( slurm-* )

(( ${#candidates[@]} < 2 )) && exit 0    ## nothing to do if <2 files exist

latest=${candidates[0]}                  ## populate latest variable w/ first
for candidate in "${candidates[@]}"; do  ## loop through the whole set
  if [[ $candidate -nt $latest ]]; then  ## and if one is newer, call it "latest"
    latest=$candidate
  fi
done

for candidate in "${candidates[@]}"; do  ## iterate through the whole set
  if [[ $candidate != "$latest" ]]; then ## and for everything but the latest file
    rm -f -- "$candidate"                ## run a deletion
  fi
done
0
Charles Duffy 24 Апр 2017 в 20:23

Отвечая на проблему XY, вы можете найти лучший способ, чтобы фактически добавить #SBATCH -o output.txt к вашему файлу представления, чтобы каждый раз перезаписывать выходной файл Slurm, если вы хотите сохранить чистый рабочий каталог при отправке несколько раз в подряд одну и ту же работу, пока она правильно не запустится.

0
damienfrancois 28 Апр 2017 в 13:52