如果一个目录中的文件比另一个目录中的文件更新,我想在shell脚本中运行命令。
我想要这样的东西
if [ dir1/* <have been modified more recently than> dir2/* ]; then
echo 'We need to do some stuff!'
fi
答案 0 :(得分:1)
如BashFAQ #3中所述,此处细分为可重复使用的函数:
newestFile() {
local latest file
for file; do
[[ $file && $file -nt $latest ]] || latest=$file
done
}
directoryHasNewerFilesThan() {
[[ "$(newestFile "$1"/*)" -nt "$(newestFile "$2" "$2"/*)" ]]
}
if directoryHasNewerFilesThan dir1 dir2; then
echo "We need to do something!"
else
echo "All is well"
fi
如果要将目录本身计为文件,也可以这样做;只需将"$(newestFile "$1"/*)"
替换为"$(newestFile "$1" "$1"/*)"
,同样替换为newestFile
$2
的调用。
答案 1 :(得分:1)
使用/ bin / ls
#!/usr/bin/ksh
dir1=$1
dir2=$2
#get modified time of directories
integer dir1latest=$(ls -ltd --time-style=+"%s" ${dir1} | head -n 2 | tail -n 1 | awk '{print $6}')
integer dir2latest=$(ls -ltd --time-style=+"%s" ${dir2} | head -n 2 | tail -n 1 | awk '{print $6}')
#get modified time of the latest file in the directories
integer dir1latestfile=$(ls -lt --time-style=+"%s" ${dir1} | head -n 2 | tail -n 1 | awk '{print $6}')
integer dir2latestfile=$(ls -lt --time-style=+"%s" ${dir2} | head -n 2 | tail -n 1 | awk '{print $6}')
#sort the times numerically and get the highest time
val=$(/bin/echo -e "${dir1latest}\n${dir2latest}\n${dir1latestfile}\n${dir2latestfile}" | sort -n | tail -n 1)
#check to which file the highest time belongs to
case $val in
@(${dir1latest}|${dir1latestfile})) echo $dir1 is latest ;;
@(${dir2latest}|${dir2latestfile})) echo $dir2 is latest ;;
esac
答案 2 :(得分:0)
这很简单,以机器格式(纪元时间)获取两个文件夹的时间戳,然后进行简单的比较。这都是