【问题标题】:Bash, how to delete unique filenames?Bash,如何删除唯一的文件名?
【发布时间】:2017-05-04 17:56:02
【问题描述】:

文件夹中有.mp4文件;和.txt 文件,其中包含有关.mp4 文件的文本信息,具有相同的文件名。但是有一些.mp4 文件没有文本文件。我只想删除这些(唯一的).mp4 文件,在Bash (Ubuntu14.04) 中有简单的方法吗?

例子:

001.mp4
001.txt
002.mp4
002.txt
003.mp4
004.mp4
004.txt

我只想从文件夹中删除003.mp4

【问题讨论】:

  • 你自己尝试了什么?
  • 文件夹是否只包含txt和mp4文件?
  • 您好,是的,.mp4 和 .txt 文件是文件夹中唯一的文件类型。有成千上万个。
  • 只有.txt文件怎么办?您要删除未耦合的文件还是仅删除没有 .txt 文件的 .mp4 文件?
  • 我想删除没有 .txt 对的 .mp4 文件。

标签: bash ubuntu


【解决方案1】:

回显先查看哪些文件将被删除

for file in *.mp4 ; do [[ -f ${file%.mp4}.txt ]] || echo "file not found ${file%.mp4}.txt"; done

删除文件

for file in *.mp4 ; do [[ -f ${file%.mp4}.txt ]] || /usr/bin/rm "${file}"; done

或取决于命令 rm 所在的位置并避免使用别名

for file in *.mp4 ; do [[ -f ${file%.mp4}.txt ]] || \rm "${file}"; done

【讨论】:

  • /usr/bin 中好像没有 rm 文件; remover.sh: line 1: /usr/bin/rm: No such file or directory 好的 将“/usr/bin/rm”改为“rm”后效果很好,非常感谢!
  • 你也可以只使用 rm 或 \rm 来避免使用别名,但 type rmwhich rm 会给你使用的命令
【解决方案2】:

基于列表的方法。

这会生成一个包含扩展名为 .txt 的所有 txt 文件的列表:

basename -as.txt *.txt

mp4 文件也是如此:

basename -as.mp4 *.mp4

grep 可用于减去两个列表。这是mp4 文件的列表,没有txt 文件:

basename -as.mp4 *.mp4 | grep -vf <(basename -as.txt *.txt)

xargs可以用来对列表执行命令:

basename -as.mp4 *.mp4 |
grep -vf <(basename -as.txt *.txt) |
xargs -i rm {}.mp4

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 2015-10-31
    • 2022-12-14
    • 2022-12-01
    • 2019-10-13
    • 2021-11-17
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多