gpt4 book ai didi

linux - 在 mv 命令中嵌入 bash 命令

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:21 25 4
gpt4 key购买 nike

我有一个目录,其中包含具有以下格式的文件列表:

  • 240-timestamp1.ts
  • 240-timestamp2.ts
  • ...
  • 360-timestamp1.ts
  • 360-timestamp2.ts

现在,我想实现一个 bash 命令,它匹配以“240”开头的文件并重命名它们,这样文件看起来像 而不是 “240-timestampX.ts” '240-human-readable-timestampX.ts'

我尝试了以下方法:

find . -maxdepth 1 -mmin +5 -type f -name "240*"
-exec mv $0 {$0/240-***and here I want to insert
either stat -c %y filename or date -d @timestampX***} '{}' \;

我卡在这里是因为我不知道是否可以在 mv 命令中嵌入 bash 命令。我知道这个任务可能看起来有点困惑和过于复杂,但我想知道是否可以这样做。当然,我可以创建一个 bash 脚本来遍历目录中的所有文件,并通过更改它们各自的名称来循环它们,但不知何故,我认为单个命令会更有效(即使可读性较差)。

  • 操作系统为Linux Ubuntu 12.04.5
  • shell 是 bash

谢谢你们KenavozKurt Stutsman对于建议的解决方案。你的两个答案都完成了任务;但是,由于我的问题与 Kenavoz 的回答之间的相似程度,我将 Kenavoz 的回答标记为已接受的回答。即使确实可以通过省略 find 命令以更简洁的方式执行此操作,但在我的情况下也有必要使用相应的命令,因为我需要查找早于 X 个时间单位的文件。所以再次感谢你们!

最佳答案

如果您想保留 mmin 选项,您可以使用 find 并使用 xargs 通过 bash 命令处理找到的文件:

find . -maxdepth 1 -mmin +5 -type f -name "240*.ts" | xargs -L 1 bash -c 'mv "${1}" "240-$(stat -c %y ${1}).ts"' \;

关于linux - 在 mv 命令中嵌入 bash 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com