我是Unix编程的新手,我正在尝试使用ls -ltr
将目录列表中的返回值存储到数组中。我的shell代码在这里:
cmd=("ls -ltr | grep ^- | awk 'NR==1{print NR":" $9}' | tr ' ' '\n'")
file[$i]=(`echo eval $cmd`); //line no. 14
echo ${file[$i]};
现在,这是错误消息:
./file.sh: line 14: file[$i]: cannot assign list to array member
谁能告诉我该怎么做?
答案 0 :(得分:1)
我认为不依赖全局标志会更强大。它们也影响你的代码的其余部分。 你也不应该解析ls的输出。 'ls'输出取决于'locale'设置,可能会有所不同。
使用“查找”选择您想要的文件
myDir="."
find $myDir -maxdepth 1 -type f -printf "%T@ %p\n" | sort -n | head -n 1
返回目录中最旧的一个。
(maxdepth限制到当前目录并排除子目录 -type f表示文件只有没有dirs -printf%T%p显示修改时间,后跟文件名 )
使用
find $myDir -maxdepth 1 -type f -printf "%T@ %p\n" | sort -n | head -n 1 | awk '{$1=""; print $0;}'
只获取文件名。
答案 1 :(得分:0)
这是一种方法:
$ shopt -s dotglob
$ shopt -s nullglob
$ ary=(*/)
$ printf "%s\n" "${ary[@]}"
$ touch file1 file2 file3
$ mkdir dir1 dir2 dir3
$ ls -la
total 20
drwxr-xr-x 5 test test 4096 Jul 26 06:05 .
drwxr-xr-x 14 test test 4096 Jul 26 06:04 ..
drwxr-xr-x 2 test test 4096 Jul 26 06:05 dir1
drwxr-xr-x 2 test test 4096 Jul 26 06:05 dir2
drwxr-xr-x 2 test test 4096 Jul 26 06:05 dir3
-rw-r--r-- 1 test test 0 Jul 26 06:05 file1
-rw-r--r-- 1 test test 0 Jul 26 06:05 file2
-rw-r--r-- 1 test test 0 Jul 26 06:05 file3
$ shopt -s dotglob
$ shopt -s nullglob
$ ary=(*/)
$ printf "%s\n" "${ary[@]}"
dir1/
dir2/
dir3/