在终端中列出没有扩展名的文件名?

在终端中列出没有扩展名的文件名?

我用的是 Mac。我需要获取文件夹中的文件列表,但不要在列表中包含它们的扩展名。这是因为我需要一个产品列表来导入网站,而且方便的是,图片名称与产品名称相同。但是,我的列表不需要包含扩展名。

我使用终端获得了文件名列表,并能够将它们复制到文本文件中。唯一的问题是文件名包含扩展名“.jpg”。使用我从终端获得的列表,我现在必须浏览我的文本文件并手动删除每个文件名的扩展名(超过一千个),这将花费很长时间。有没有更简单的方法?我可以让终端显示不带扩展名的文件名列表,以便我可以将其复制并粘贴到列表中吗?或者我可以从这些文件中删除扩展名,然后在终端中列出它们并复制它们的名称吗?还有其他方法吗?我很困惑。我不是程序员,只是网站设计师。

希望有人能帮忙。谢谢大家!

答案1

借自堆栈溢出

ls -1 | sed -e 's/\..*$//'

我尝试将其标记为重复,但没有成功。

由于我们知道文件扩展名,所以我的解决方案之一就是。

find -type f -exec basename -s '.jpg' "{}" \;

因此,查找所有文件(而不是目录) - type f,然后basename对每个文件执行。-s允许您指定要删除的已知后缀。

另一个替代解决方案:来自 SU

答案2

如果文件“in.txt”中有文件列表,请运行此脚本来获取“out.txt”中没有扩展名的文件列表:

#!/bin/bash    
while read fullfile; do
    filename=$(basename "$fullfile")
    filename="${filename%.*}"
    echo $filename >> out.txt
done <in.txt

答案3

你使用vi(或vim) 吗?如果你这样做,那么,由于你已经在文本文件中获得了 JPEG 文件名,最简单的方法可能是使用vi/编辑该文件vim并输入

:%s/\.jpg$//

意思是,在文件的每一行中,查找.jpg行末出现的 ,将其删除,并将其替换为空。如果有些行不是以 结尾的.jpg,那也没关系;它们将被忽略(跳过)。如果每行有多个产品名称(文件名),例如

        hammer.jpg              screwdriver.jpg         wrench.jpg

只需省略$并添加g并说

:%s/\.jpg//g

这将删除全部的出现.jpg,即使它们不在一行的末尾。

相关内容