我有一个每行包含2个字符的文件,如下所示:
RU
8A
1C
如何将这些字符读入unix命令(在这种情况下,形成ls -t
的参数列表)?我想要这样的东西:
ls -t RU* 8A* 1C*
答案 0 :(得分:1)
如果您想要三次单独运行ls
:
while IFS= read -r line; do
ls -t "$line"*
done <input_file.txt
如果您只想进行一次运行,并将所有内容整合在一起:
set --
while IFS= read -r line; do
[ -n "$line" ] || continue
set -- "$@" "$line"*
done <input_file.txt
ls -t "$@"
请注意,ls -t
是一个不可靠的工具。如果您传递的文件名多于单个命令调用的文件名,那么它将无法工作(并尝试制作它使用xargs
工作将在输出中为您提供多个单独排序的列表。如果在具有GNU工具的平台上(bash,以及GNU find
和sort
),请考虑以下内容:
#!/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)
有用的链接: