在文件夹中有.mp4
个文件;和.txt
个文件,其中包含有关.mp4
个文件的文本信息,文件名相同。但是有一些.mp4
文件没有文本文件。我想只删除这些(唯一的).mp4
文件,在Bash
(Ubuntu14.04)中有一种简单的方法吗?
示例:
001.mp4
001.txt
002.mp4
002.txt
003.mp4
004.mp4
004.txt
我只想从文件夹中删除003.mp4
。
答案 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