Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Shell 仅当前缀与文件中的一行匹配时,才列出按时间排序的文件_Shell_Unix - Fatal编程技术网

Shell 仅当前缀与文件中的一行匹配时,才列出按时间排序的文件

Shell 仅当前缀与文件中的一行匹配时,才列出按时间排序的文件,shell,unix,Shell,Unix,我有一个文件,每行有2个字符,如下所示: RU 8A 1C 如何将这些字符读入unix命令(在本例中,形成ls-t的参数列表)?我想要这样的东西: ls -t RU* 8A* 1C* 如果您想要三次单独运行ls: while IFS= read -r line; do ls -t "$line"* done <input_file.txt 有用链接: -如何逐行(和/或逐字段)读取文件(数据流、变量) -如何根据某些元数据属性(最新/最旧的修改时间、大小等

我有一个文件,每行有2个字符,如下所示:

RU    
8A   
1C
如何将这些字符读入unix命令(在本例中,形成
ls-t
的参数列表)?我想要这样的东西:

ls -t RU* 8A* 1C*   

如果您想要三次单独运行
ls

while IFS= read -r line; do
  ls -t "$line"*
done <input_file.txt

有用链接:

  • -如何逐行(和/或逐字段)读取文件(数据流、变量)
  • -如何根据某些元数据属性(最新/最旧的修改时间、大小等)对文件进行排序或比较

管道
ls
相互之间的命令没有任何意义
ls
不会从stdin中读取,因此除了最后一行之外,其他所有行的输出都将被忽略。不过,假设
ls
只是一个占位符--是否要根据文件中的行数更改管道元素的数量?最后一行不用作通配符前缀是故意的吗?文件中的字符是我想在ls-t命令中使用的前缀,文件中的内容可能会不时有所不同,因此我需要命令是动态的。问题中显示的
ls-t
管道实际上不起作用。它忽略了最后一行以外的所有内容。如果你想让我们知道你想做什么,告诉我们一些有用的东西;我们无法从损坏的代码中推断意图。(此外,通常容易出错;如果您想按日期对一堆文件进行排序,有更好的方法可以做到这一点。)早期的
find
版本中有一个bug——我已经从填充
“$@”
改为使用名为
谓词的数组,但是没有将该数组扩展到
find
命令行。请参阅最近的编辑。
set --
while IFS= read -r line; do
  [ -n "$line" ] || continue
  set -- "$@" "$line"*
done <input_file.txt
ls -t "$@"
#!/usr/bin/env bash

predicates=( -false )
while IFS= read -r line; do
  predicates+=( -o -name "${line}*" )
done <input_file.txt

while IFS= read -r -d' ' mtime && IFS= read -r -d '' filename; do
  echo "Processing file $filename with timestamp $mtime"
done < <(find . -maxdepth 1 '(' "${predicates[@]}" ')' -printf '%T@ %P\0' | sort -z -n)