【发布时间】:2020-05-14 21:02:06
【问题描述】:
我有以下代码,它根据时间戳删除目录中的旧文件:
ls -tp | grep -v '/$' | tail -n +2 | xargs -I {} rm -- {}
我正在尝试制作一个可执行脚本,我不想 cd 进入应该运行上述命令的目录,而是简单地传递路径,例如/tmp/backups/ 给它。
我该怎么做?在每个命令后直接附加路径ls、grep、tail、xargs 和rm?
【问题讨论】:
-
您可能应该not be using
lsin the first place。脚本本身可以安全地cd到您作为参数传入的目录;父 shell 的工作目录不会受到影响。 -
删除超过 3 天:
find <path> -mtime +3 -exec rm -f {} \;或find <path> -mtime +3 -delete; -
@SielaQ 但我只想保留最近的文件。
-
@tripleee 是的,但是我的文件有一个静态模式,不受您提到的问题的影响。传递到
ls的路径对我不起作用。它仍然在父目录中查找。 -
我没有说将路径传递给
ls;我说cd,就像你得到的答案一样。ls受到许多问题的影响,包括但不限于将文件名中的特殊字符变成问号或类似字符。