Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bash中文件夹内容的子集中获取最新文件_Bash - Fatal编程技术网

从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*))