从bash中文件夹内容的子集中获取最新文件
我有一个包含这些内容的文件夹从bash中文件夹内容的子集中获取最新文件,bash,Bash,我有一个包含这些内容的文件夹 nass@starmaze:~/audio_setup/scripts$ ls -l ../jmess/ total 32 -rw-rw-r-- 1 nass users 1573 Νοέ 16 2014 jmess_fxio56-78feedsHDA-play12.jmess -rw-rw-r-- 1 nass nass 1573 Δεκ 13 2014 jmess_pb-2.jmess -rw-rw-r-- 1 nass nass 1573 Δεκ
nass@starmaze:~/audio_setup/scripts$ ls -l ../jmess/
total 32
-rw-rw-r-- 1 nass users 1573 Νοέ 16 2014 jmess_fxio56-78feedsHDA-play12.jmess
-rw-rw-r-- 1 nass nass 1573 Δεκ 13 2014 jmess_pb-2.jmess
-rw-rw-r-- 1 nass nass 1573 Δεκ 20 2014 jmess_pb-3.jmess
-rw-rw-r-- 1 nass nass 1939 Ιούν 12 13:05 jmess_starmazeOnMaster.jmess
-rw-rw-r-- 1 nass nass 2163 Δεκ 15 2014 jmess_starmazeOnMaster.jmess.bak1-art
-rw-rw-r-- 1 nass nass 2161 Δεκ 15 2014 jmess_starmazeOnMaster.jmess.bak2-bcr
-rw-rw-r-- 1 nass nass 2389 Δεκ 22 2014 jmess_starmazeOnMaster.jmess.bak3-hoo
-rw-rw-r-- 1 nass nass 2163 Δεκ 15 2014 jmess_starmazeOnMaster.jmess.bak4-dsp
我希望能够获取最新的文件,但只能从其中不包含单词“Master”的文件子集中获取。我想把它放到bash脚本中
那么这个
ls -t1 "${JCMESS_FOLDER}" | head -n1
提供文件夹中的最新文件,而
ls -t1 "${JCMESS_FOLDER}"/!(*Master*) | head -n1
提供我感兴趣的子集中的最新文件
但是,当我将后者放在bash脚本中时
$NEWEST_JCMESS_FILE=$( ls -t1 "${JCMESS_FOLDER}"/!(*Master*) | head -n1 )
它不起作用:
./06.load_jcmess: command substitution: line 8: syntax error near unexpected token `('
./06.load_jcmess: command substitution: line 8: ` ls -t1 "${JCMESS_FOLDER}"/!(*Master*) | head -n1 )'
我不确定这件事到底出了什么问题,我也没能成功地找到答案
提前感谢您的帮助这是:
根本不要为此使用
ls
。另请参见,所有CAP名称都是为内置和影响系统的环境变量保留的;将它们用于自己的变量是一种糟糕的形式。请参阅POSIX规范@的第四段,记住环境变量和shell变量共享一个名称空间。顺便说一句,请确保您正在运行shopt-s extglob
。我想知道您是否认为,因为extglob在交互式shell中工作,所以它们在脚本中默认也是打开的?不是这样;需要显式地启用它们。(在交互式shell中也是如此)。请添加“shopt-s extglob”作为使上述代码正常工作的必要步骤。
newest() {
local candidate result=$1; shift # start with first argument as candidate
[[ -e $result ]] || return # handle case where nothing matched
for candidate; do # for loop default behavior is to loop over "$@"
[[ $candidate -nt $result ]] && result=$candidate
done
printf '%s\n' "$result"
}
shopt -s extglob # enable extglobs, ie. !(...)
newest_file=$(newest "$JCMESS_FOLDER"/!(*Master*))