Bash,如何删除唯一的文件名?

时间:2017-05-04 07:54:49

标签: bash ubuntu

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

示例:

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

基于列表的方法。

这将生成所有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