如何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)
- 或者更简单,使用
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
这是一个后期处理解决方案,使用sed
或awk
:
ls -1 | sed -n '/'"$filename"'/,$p'
或者
ls -1 | awk '/'"$filename"'/,EOF'
其中,例如
filename='file2.txt'