如何在选项卡完成列表中按日期对文件进行排序

如何在选项卡完成列表中按日期对文件进行排序
$ 7z l ~/下载/Tab

如何使结果列表按日期而不是按名称排序?

我目前使用特殊脚本列出给定目录中的 N 个最新文件(并将文件名手动复制到命令行中),但希望使其无缝且更方便。

答案1

我认为无法bash做到这一点,所以你可以尝试一下zsh。虽然我不是 zsh 用户,但我认为这个配置应该有效:

autoload -U compinit
compinit
zstyle ':completion:*' file-sort modification reverse

reverse此处可查看列表末尾的最新文件,因为屏幕上可能看不到上面的部分。)

答案2

有时,我需要在“下载”目录中查找最近下载的文件,但可能不知道确切的文件名。我是这样做的。

ls -rt ~/Downloads

ls -t按时间而不是名称列出文件,首先显示最近的文件。由于我的下载目录包含如此多的文件,我不想滚动到列表顶部来查看最新的文件。 ls -rt反转列表的顺序,在列表底部显示最新的文件。

从那里你可以很容易地做你需要做的事情。例如:

unzip $(ls -rt ~/Downloads | tail -n1)

或者

mv $(ls -rt ~/Downloads | tail -n1) *some_other_location*

你原来的问题可以这样完成:

7z l $(ls -rt ~/Downloads | tail -n1)

我意识到这不符合 Tab 补全方法,但它可能适合您的需求。

答案3

我将为其执行以下步骤

  1. First I will find the files and their timestamps
  2. Sort them reversely
  3. Take top N
  4. Get the filenames
  5. Zip it or do whatever u like

脚本看起来像这样(可能很复杂)

find ~/Downloads/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -N | cut -d' ' -f3 | xargs 7z l

答案4

在 bash 中,您可以使用以下方法得到一些接近的结果:

7z l ~/Downloads/Alt+n

其中bind已映射Alt+n到重写变量的函数READLINE_LINE

为了近似制表符完成,我使用 argument-parsing-perl-kludge 来完成此操作并fzf显示菜单。

https://github.com/WillForan/fuzzy_arg/blob/master/fuzzy_new_complete.bash

相关内容