我试图在不同的目录而不是当前目录中列出特定文件。
看看这个简单的日志:
[johni /share/ex_data/ex4] > ls
example.c header1.h header3.h
example2.c header2.h
[johni /share/ex_data/ex4] > ls -t header*
header1.h header2.h header3.h
[johni /share/ex_data/ex4] > cd
[johni ~] >
[johni ~] >
[johni ~] > ls -t header* /share/ex_
ex_data / ex_sol /
[johni~]> ls -t header * / share / ex_data / ex4
ls:不匹配
我怎么能用那些' ls'来自另一个目录的命令/ share / ex_data / ex4目录?
谢谢!。
答案 0 :(得分:2)
ls
在另一个目录中:
ls -t /share/ex_header*
答案 1 :(得分:1)
如果您希望输出包括合格的目录名,那么您只需使用
即可ls -t /share/ex_data/ex4/header*
如果您不希望包含目录名,请在调用ls
之前使用更改目录的子shell(作为性能增强,它使用exec
仅生成一个新的进程表条目而不是可能需要两个):
(cd /share/ex_data/ex4 && exec ls -t header*)
也就是说,如果要为脚本执行此操作 - 例如,要查找最新或最旧的文件名 - 它是bad practice to parse ls
; other techniques可用于查找最新或最旧的文件(如果您只想执行此操作,则应遵循上面的后一个链接,而不是使用下面给出的更复杂的代码来提供完整的排序。)
例如,如果您有GNU find
,GNU sort
和bash并希望通过mtime
将文件列表加载到数组中,则以下内容将适用于文件名,完全抛弃ls -t
- 包括包含换行符等的名称:
filenames_by_mtime=( )
while read -r -d ' ' time && IFS= read -r -d '' filename; do
filenames_by_mtime+=( "$filename" )
done < <(find /share/ex_data/ex4 \
-maxdepth 1 \
-type f \
-name 'header*' \
-printf '%T@ %P\0' \
| sort -z -n)
...然后可以使用"${filenames_by_mtime[@]}"
扩展此数组,或者为单个条目编制索引 - 例如,最旧的文件将是"${filenames_by_mtime[0]}"
。