如何在UNIX中查找文件扩展名?

6

我需要找到在UNIX系统中处理文件的文件扩展名。我将要处理的两种文件扩展名是'.dat'和'.csv'。

请告诉我如何完成这个任务。

5个回答

20
find . -name "*.dat" -o -name "*.csv"

递归地搜索当前目录及其子目录中,所有以这两个扩展名结尾的文件。


假设我有一个名为“test.dat”的单个文件,如何确定当前文件是否具有“.dat”文件扩展名。上述脚本将列出所有以“.dat”扩展名的文件。 - Arun Antony
find . -name test.dat 只会查找名为 test.dat 的文件。 - jacobsimeon

3
这是你想要的吗?
find . -name "*.dat"
find . -name "*.csv"

假设我有一个名为“test.dat”的单个文件,如何确定当前文件是否具有“.dat”文件扩展名。上述脚本将列出所有以“.dat”扩展名的文件。 - Arun Antony
也许这可以帮助你:http://unix.stackexchange.com/questions/1571/bash-get-file-extension - alexl

3
所以这是我的尝试。
filename=file.dat
extension=$(echo ${filename}|awk -F\. '{print $2}')
if [ ${extension} == "dat" ]; then
   your code here
fi

将变量${filename}的内容打印并通过管道传递给awk命令。在awk命令中重置字段分隔符为".",然后提取第2个字段(即print $2部分)。


为什么要使用awk,当find的设计就是用来解决这个确切的问题的? - jacobsimeon

2
如果你有一个变量来存储文件名
filename = test.csv

那么只需使用这个来获取“csv”部分即可:
echo ${filename##*.} 

适用于bash,可以在ksh中尝试。

编辑:

filename=test.csv
fileext=${filename##*.}
if [ fileext = "csv" ]; then
        echo "file is csv, do something"
    else
        if [ fileext = "dat" ]; then
            echo "file is dat, do something" 
        else
            echo "mhh what now?"
        fi
fi

我不需要没有扩展名的文件名... 我需要找出将要处理的文件的扩展名是什么。 - Arun Antony

2
find /path -type f \( -name "*.dat" -o -name "*.csv" \) | while read -r file
do
   echo "Do something with $file"
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接