![](/img/trans.png)
[英]Linux bash script to find and delete oldest file with special characters and whitespaces in a directory tree if condtion is met
[英]Bash script to find and display oldest file
我正在尝试编写一个脚本,该脚本将显示执行脚本的目录中最旧文件的名称。
这是我到目前为止:
#!/bin/bash
for arg in $*
do
oldest=$1
if [[ $arg -ot $oldest ]]
then
oldest=$arg
fi
done
echo "Oldest file: $oldest"
我不确定如何递增到下一个文件以检查它是否较旧
例如:
oldest=$2
oldest=$3
etc..
鉴于以下参数,尝试在 bash shell 中运行此脚本:
myScript `ls -a`
我得到的结果是:
Oldest File: .
ls
程序有一个按时间排序的选项,您可以从该输出中获取最后一个文件:
# These are both "wun", not "ell".
# v v
oldest="$(ls -1t | tail -1)"
如果你想避免目录,你可以事先把它们去掉:
# This one's an "ell", this is still a "wun".
v v
oldest="$(ls -lt | grep -v '^d' | tail -1 | awk '{print $NF}')"
我通常不提倡解析ls
输出,但它适用于快速和肮脏的工作,并且如果您了解它的局限性。
如果您想要一个脚本,即使对于那些坚持将控制字符放在文件名中的疯子也能工作:-) 那么这个页面有一些更好的选择,包括:
unset -v oldest
for file in "$dir"/*; do
[[ -z $oldest || $file -ot $oldest ]] && oldest=$file
done
虽然我建议按照该链接了解为什么ls
解析通常被认为是一个坏主意(以及为什么它在有限的情况下很有用,例如当您可以保证所有文件都是YYYY-MM-DD.log
类型时)例如)。 那里有一种有用的信息字体。
您可以使用此功能在任何目录中查找最旧的文件/目录:
oldest() {
oldf=
for f in *; do
# not a file, ignore
[[ ! -f "$f" ]] && continue
# find oldest entry
[[ -z "$oldf" ]] && oldf="$f" || [[ "$f" -ot "$oldf" ]] && oldf="$f"
done
printf '%s\n' "$oldf"
}
并将其在任何目录中调用为:
oldest
下面的 oneliner 在整个子树中查找最旧的文件,并使用长格式和相对完整路径报告它。 你还需要什么?
ls -ltd $(find . -type f) | tail -1
你可以使用find
命令: find -type f -printf '%T+ %p\\n' | sort | head -1
find -type f -printf '%T+ %p\\n' | sort | head -1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.