查找一个扩展名的文件名,但没有其他扩展名的匹配文件名

用户394

我买了一个特殊的数码相机,它保存了一种专有的图像格式,以.lri. 该公司有一个桌面程序可以将 .lri 文件渲染成标准的 jpg 和 dng 文件。

我发现当我查看保存这些文件的目录时,我错过了一些文件的转换。然而,我能够直观地注意到丢失的对、文件的数量和嵌套的目录结构,这使得我很难确定地找到我想要转换的所有文件。

.lri当不存在匹配的文件时,我正在寻找一个 shell 命令来查找扩展名的文件.dng(我目前不担心 jpg 文件)。例如,如果我有L16_04198.lri,我应该有L16_04198.dng,如果我在几个月或几年前勤奋工作。

编辑我没有提到的两个约束:文件位于嵌套目录结构中,因此这需要是递归搜索。另外,我的目录名称中有空格,因此它也需要能够处理。

所以我需要一个命令或脚本来向我报告文件名L16_04198.lri,如果它L16_04198.dng在嵌套子目录结构中的任何地方都没有找到(我可能已经渲染了文件,但把它放在了错误的子目录中)。

我熟悉该find命令,但我不确定如何查找“非”文件名,并在未找到该名称时报告。

红砂砖

tl;博士:

find . -name "*.txt" | perl -nle 's/\.txt$/.foo/; print unless -e' | cat -v

这是一个使用 Perl 的例子

请注意,我们缺少一个 c.foo

$ ls
a.foo  a.txt  b.foo  b.txt  c.txt

我们可以这样找到

$ ls *.txt | perl -nle 's/\.txt$/.foo/; print unless -e '
c.foo

c.foo 丢失


更新:处理包含元字符等的文件名

考虑这组包含空格、换行符和管道符号的文件名

$ ls *txt
 a.txt   b.txt   c.txt  'd d.txt'  'e'$'\r''e.txt'  'f'$'\n''f.txt'  'g|g.txt'   taskmaster.txt

实际上,Perl 在解析 ls 的输出时似乎没有问题:

$ ls *txt | perl -nle 's/\.txt$/.foo/; print unless -e'
c.foo
d d.foo
e.foo
f
f.foo
g|g.foo
taskmaster.foo

显然,如果您的文件名包含控制字符,您可能需要使它们更明显

$ ls *txt | perl -nle 's/\.txt$/.foo/; print unless -e' | cat -v
c.foo
d d.foo
e^Me.foo
f
f.foo
g|g.foo
taskmaster.foo

如果你想让它递归地工作

$ find . -name "*.txt" | perl -nle 's/\.txt$/.foo/; print unless -e' | cat -v
./c.foo
./d d.foo
./e^Me.foo
./f
f.foo
./g|g.foo
./h*h.foo
./temp/j.foo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果目录中没有其他扩展名的文件名,请删除文件

没有扩展名VBA的文件名

没有扩展名的文件名

AppleScript中没有扩展名的文件名

如果文件在上一个目录中,请删除文件名称相同但没有扩展名的其他目录

查找大写扩展名的文件名

查找在Unix上没有以特定扩展名结尾的文件名?

通过CMake删除文件名(最短)扩展名(获取文件名删除最后一个扩展名)

查找以扩展名或无扩展名的特定字符结尾的文件名

提取具有扩展名URL的文件名

如何从上传的图片中获取文件扩展名,而文件名中没有扩展名

从具有多个扩展名的文件名中删除某些扩展名

重命名所有“。” 文件名中扩展名“ _”(扩展名除外)

文件名是否允许在文件扩展名之前使用其他点?

打印带有另一个扩展名的文件名(批处理程序)

如何下载网址中没有文件名和文件扩展名的文件

查找两个目录之间的文件名差异(忽略文件扩展名)

正则表达式在没有文件扩展名的最后一个点之后获取文件名的一部分

完成没有 root 的文件名,只有扩展名(隐藏文件)

PHP - 目录列表脚本 - 显示没有文件扩展名的文件名

根据当前页面文件名添加类,没有文件扩展名

部分文件名搜索没有文件扩展名的Azure Blob存储

如何只恢复没有路径和文件扩展名的文件名?

PHP,获取不带文件扩展名的文件名

从熊猫文件名中提取文件扩展名

从URL获取文件名并删除文件扩展名

修剪文件名但保留文件扩展名

OSX命令行查找具有不同扩展名的重复文件名

在 Linux 中找出两个目录之间缺少的文件(缺少文件名,但没有扩展名)