删除名称中包含子字符串的所有但最近的文件

时间:2017-04-24 17:59:34

标签: bash replace

我正在寻找一个bash脚本(或一行代码)来完成以下任务:

  1. 检查是否有多个文件包含子字符串" slurm - "
  2. 如果是,请删除包含除最新的
  3. 之外的子字符串的所有文件

    非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

上面的文件列表非常长,效率不高,但是(1)它有一个短列表(低常量启动成本),以及(2)它&#39 ;非常明确地说明它是如何运作的(易于阅读和理解)。

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

答案 1 :(得分:0)

回答XY问题,如果您的目的是在提交时保持干净的工作目录,您可能会发现将#SBATCH -o output.txt实际添加到提交文件以每次覆盖Slurm输出文件的更好方法连续几次完成相同的工作,直到它正常运行。