我有两个目录。
/application/inbox
/application/unresponsive
该应用程序会在收件箱中查找 *.txt 文件并处理它们。该应用程序会定期将这些文件中的条目保存到无响应文件夹中以日期命名的文件中(2009-07-31)。
我想设置一个 cron 作业,每天运行一次,将最旧的文件从无响应的框移到收件箱中,并添加 *.txt 扩展名,以便应用程序获取它。
答案1
未经测试,可能有错误:
#!/bin/sh
# last file in list sorted newest->oldest
OLDEST=$(ls -t /application/unresponsive | tail -1)
# make sure $OLDEST isn't empty string
if [ -n $OLDEST ]; then
# quote in case of spaces and remove directory name
mv "$OLDEST" /application/inbox/$(basename "$OLDEST").txt
fi
答案2
如果您希望它能够处理带有空格的文件(更可靠)。您应该循环遍历它们并使用 -nt(基于修改时间的最新)或 -ot(最旧)比较运算符和基本的最小/最大算法。以下是此示例优秀的 BashFAQ:
files=(*) newest=${f[0]}
for f in "${files[@]}"; do
if [[ $f -nt $newest ]]; then
newest=$f
fi
done
因此您的示例将是(未经测试):
files=(/application/inbox/*) oldest=${f[0]}
for f in "${files[@]}"; do
if [[ $f -ot $oldest ]]; then
oldest=$f
fi
mv "$oldest" /application/unresponsive/
done
学习如何不是我认为使用 ls 的输出更好。这是链接争论为什么。但我留给你来判断这是真的还是只是伪unix大师的胡言乱语:-)