我的文件名带有不以结尾的MP4扩展名_special.MP4
:
mylist=$(ls | grep -v "_special.MP4")
然后,我想.MP4
从此后续列表中删除扩展名。
echo $mylist | sed -e 's/\.MP4$//'
只删除最后一次.MP4
出现的情况,如何才能全部获得?
假设我有以下以.MP4结尾的文件:
.
├── 1.MP4
├── 2.MP4
└── 3_special.MP4
如果我理解正确,则需要非特殊文件的名称,减去.MP4扩展名。
首先,我将使用find
代替,ls
因为它更易于控制并且更易于解析输出。无论哪种方式,您最终都将得到一个由换行符分隔的列表文件:
$ find . -name '*.MP4' -not -name '*_special.MP4'
./1.MP4
./2.MP4
您的sed命令将按原样工作,因为$
模式中的绑定到每行的末尾:
$ find . -name '*.MP4' -not -name '*_special.MP4' | sed -e 's/\.MP4$//'
./1
./2
该basename
命令实际上将为您完成大部分操作。您甚至都不需要sed
!的主要用途basename
是从路径的开头删除目录,但它也支持删除后缀。
概要
基本名称字符串[后缀]
basename
仅在“字符串”位置接受一个单词,因此您需要使用xargs对每个文件运行一次。
$ find . -name '*.MP4' -not -name '*_special.MP4' | xargs -I -name- basename -name- .MP4
1
2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句