【问题标题】:file names in rotating order文件名按旋转顺序
【发布时间】:2014-06-15 17:14:53
【问题描述】:

我正在使用 mpc 功能开发音乐播放器,我想实现“下一个文件夹”功能。我需要以这种方式更改 ls 输出的顺序...

如果我在目录中有这些文件...

folder
  |_file 1
  |_file 2
  |_file 3
  |_file 4
  |_file 5

我想要一个在我第一次运行时按以下顺序返回文件名的函数:

folder
  |_file 1
  |_file 2
  |_file 3
  |_file 4
  |_file 5

下次按这个顺序

folder
  |_file 2
  |_file 3
  |_file 4
  |_file 5
  |_file 1

下次按这个顺序

folder
  |_file 3
  |_file 4
  |_file 5
  |_file 1
  |_file 2

下次按这个顺序

folder
  |_file 4
  |_file 5
  |_file 1
  |_file 2
  |_file 3

即每次运行该函数时,我都需要最后一次运行的第一个文件在最后一个位置...

【问题讨论】:

  • 你真的尝试过什么吗?
  • 你到底为什么需要这个
  • 对不起,现在已编辑。我有一个错误...
  • 你为什么要对我不利??我需要帮助...
  • 提供你的代码并描述它做错了什么。

标签: linux shell ls


【解决方案1】:

不知道为什么你的音乐播放器需要依赖,但你可以试试这样的方法

#!/bin/bash
print() {
  [[ $1 -eq 0 ]] && ls -1 && exit 0

  ls | tail -n "+$(($1+1))"
  ls | head -n $1
}

[[ $1 =~ ^[0-9]+$ ]] || { echo "Usage: $0 [0-9]+" && exit 1; }

num_files=$(ls | wc -l)
print $(($1 % $num_files))

例子

> ls
file\ 1  file\ 2  file\ 3  file\ 4  file\ 5
> ./.abovescript 0
file 1
file 2
file 3
file 4
file 5
> ./.abovescript 1
file 2
file 3
file 4
file 5
file 1
> ./.abovescript 2
file 3
file 4
file 5
file 1
file 2
...

如果您希望它每次都更改,您可以将其包装在保存先前状态的内容中。

【讨论】:

  • “不知道为什么你的音乐播放器需要依赖ls...”因为原始发布者不知道他们在做什么。虽然您的代码可能适用于所提出的部分想法,但原始发帖人在此处发表评论要求您不断更改、调整和重做其他想法的可能性不在图表之列。这是以问题为幌子对规范工作的经典呼吁。
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 2017-04-10
  • 2020-10-20
  • 2015-01-24
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多