我想使用代码file=$(cd '/path_to_zip_file' | ls -t | head -1)
的这部分从路径获取文件(zip文件)。相反,我在运行该文件的目录中找到了.sh文件。
为什么我不能从/path_to_zip_file
归档
下面是我在.sh文件中的代码
file=$(cd '/path_to_zip_file' | ls -t | head -1)
last_modified=`stat -c "%Y" $file`;
current=`date +%s`
echo $file
if [ $(($current-$last_modified)) -gt 86400 ]; then
echo 'Mail'
else
echo 'No Mail'
fi;
答案 0 :(得分:4)
如果您要使用ls -t | head -1
(不应该使用),则cd
需要作为优先命令进行更正(发生在之前 {{1 }}发生),而不是管道组件(与平行 ls
运行,并且其stdout连接到ls
的stdin):
ls
一种更好的做法可能是:
set -o pipefail # otherwise, a failure of ls is ignored so long as head succeeds
file=$(cd '/path_to_zip_file' && ls -t | head -1)
要了解newest_file() {
local result=$1; shift # first, treat our first arg as latest
while (( $# )); do # as long as we have more args...
[[ $1 -nt $result ]] && result=$1 # replace "result" if they're newer
shift # then take them off the argument list
done
[[ -e $result || -L $result ]] || return 1 # fail if no file found
printf '%s\n' "$result" # more reliable than echo
}
newest=$(newest_file /path/to/zip/file/*)
newest=${newest##*/} ## trim the path to get only the filename
printf 'Newest file is: %s\n' "$newest"
语法,请参见the bash-hackers' wiki on parameter expansion。
有关在脚本中使用${newest##*/}
的危险(显示给人类的输出除外)的危险性的更多信息,请参见ParsingLs。
启动BashFAQ #99,如何从目录中获取最新(或最旧)文件?-和BashFAQ #3(如何排序或比较基于某些元数据属性(最新/最旧的修改时间,大小等)的文件?)可以在较大范围内讨论此问题。