ls 从特定文件开始

ls 从特定文件开始

如何ls在以特定文件名开头的目录中保存文件?

例如,如果我的 CWD 有以下文件:

$ ls -1
alpha.mp3
bar.xls
file1.txt
file2.txt
foo.odt
testing3.txt

如何打印出以“file2.txt”开头的文件:

file2.txt
foo.odt
testing3.txt

或者在“foo.odt”处:

foo.odt
testing3.txt

答案1

如果你使用zsh作为你的外壳,那么你可以使用它全局限定符仅选择那些不在所选文件1之前按字典顺序排序的文件名。

前任。给定

 % ls -1
alpha.mp3
bar.xls
file1.txt
file2.txt
foo.odt
testing3.txt

然后定义一个辅助函数

 % nt() { ! [[ $NTREF > $REPLY ]] }

之后

 % NTREF=file2.txt; ls -1 -- *(+nt)
file2.txt
foo.odt
testing3.txt

 % NTREF=foo.odt; ls -1 -- *(+nt)
foo.odt
testing3.txt

您可以直接使用合格的 glob 将列表传递给您的停止命令

 % NTREF=foo.odt 
 % yourcommand -- *(+nt)

  1. 或者更简单,使用nt() { [[ $REPLY > $NTREF ]] }then 设置NTREF为最后一个文件的名称曾是处理成功

答案2

要恢复在迭代文件列表时被中断的进程,您可以重新生成该文件列表,然后删除它们,直到找到要重新启动的文件:

set -- *
# see the "before" situation
printf '%s\n' "$@"
while [ "$1" != "file2.txt" ]
do
  shift
done
# check the results
printf '%s\n' "$@"

然后您可以使用该文件列表运行您的进程:

$ your-process "$@"

上面假设您的中断进程以“自然”扩展顺序给出了文件列表 - 如果ls您不指定文件列表,则会执行此操作。

答案3

这是一个后期处理解决方案,使用sedawk

ls -1 | sed -n '/'"$filename"'/,$p'

或者

ls -1 | awk '/'"$filename"'/,EOF'

其中,例如

filename='file2.txt'

相关内容